Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

XML में मिलते-जुलते टैग कैसे जोड़ें?

यहाँ समस्या को हल करने का एक तरीका है। यह किसी भी चाइल्ड नोड नाम को हार्डकोड नहीं करता है (TI , MO , AU , आदि) ताकि आप इसे समान दस्तावेज़ों पर संभावित रूप से उपयोग कर सकें। मैंने कोड में टिप्पणियाँ डाली हैं, इसलिए कृपया उन्हें पढ़ें और पूछें कि क्या आपको समझ नहीं आ रहा है कि कोड क्या कर रहा है।

$txt = 'your XML string goes here';
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($txt);

$xp = new DOMXPath($dom);

# find all the nodes types that appear under Record
$cnode_type = array();
foreach ($xp->query("/Results/Recordset/Record/*") as $c) {
    $cnode_type[] = $c->nodeName;
}
# cnode_type now contains the different child node types
$cnode_type = array_unique($cnode_type);

# get all the Record nodes
$recs = $xp->query("/Results/Recordset/Record");

# for every Record node...
foreach ($recs as $par) {
    # for each type of child node...
    foreach ($cnode_type as $c) {
        # run an XPath query to count the number of children of node type $c
        # if there are more than one, we need to remove the extras
        if ($xp->evaluate("count($c)", $par) > 1) {
            # go through all the $c nodes, saving the value in $node_vals
            # delete the node
            $node_vals = [];
            foreach ($xp->query($c, $par) as $n) {
                # only save the contents of nodes with a value
                if (isset($n->nodeValue) && strlen($n->nodeValue) > 0) {
                    $node_vals[] = $n->nodeValue;
                }
                $par->removeChild($n);
            }
            # create a new $c node and set the value to the list in $node_vals
            # add it to the parent node
            $new_node = $dom->createElement($c, implode("; ", $node_vals));
            $par->appendChild($new_node);
        }
    }
}
# print out the result
echo $dom->saveXML();

आपके द्वारा पोस्ट किए गए XML से आउटपुट:

<?xml version="1.0"?>
<Results>
  <Recordset setCount="3">
    <Record setEntry="0">
      <TI>Test-1</TI>
      <MO>Mo-1</MO>
      <JF>OK</JF>
      <JT/>
      <AU>One; Two; three</AU>
    </Record>
    <Record setEntry="1">
      <TI>Test-2</TI>
      <MO>Mo-2</MO>
      <JF/>
      <JT/>
      <AU>One; Two; Three; Four; Five; Six; Seven</AU>
    </Record>
    <Record setEntry="2">
      <TI>Test31</TI>
      <MO>Mo-3</MO>
      <JF/>
      <JT/>
      <AU>One</AU>
    </Record>
  </Recordset>
</Results>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीएचपी पीडीओ सम्मिलित करें क्वेरी

  2. 'सेट विदेशी_की_चेक =0' का दायरा क्या है?

  3. कैसे जांचें कि उपयोगकर्ता को MySQL में एसएसएल की आवश्यकता है या नहीं?

  4. JDBC:PK पर विदेशी कुंजी एक ही लेनदेन में बनाई गई

  5. अद्वितीय कुंजी के बिना मौजूद नहीं होने पर रिकॉर्ड डालें