You need to parse a large number of xml-ek. I do through DOM. As a result, I got the expected result, but only for the first xml. At the same time, in the remaining xml the number of fields (<Field>) is different. Suppose in one xml of fields 10, in another there can be 12-15.
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <title>XML-разборщик</title> </head> <body> <?php $doc = new DOMDocument(); $doc->load('7035_983300001.xml'); $nObject=$doc->getElementsByTagName('Object')->item(0); $nField=$doc->getElementsByTagName('Field')->item(0); $nField1=$doc->getElementsByTagName('Field')->item(1); $nField2=$doc->getElementsByTagName('Field')->item(2); $nField3=$doc->getElementsByTagName('Field')->item(3); $nField4=$doc->getElementsByTagName('Field')->item(4); $nField5=$doc->getElementsByTagName('Field')->item(5); $nField6=$doc->getElementsByTagName('Field')->item(6); //Object if ($nObject->hasAttributes()) { echo "Атрибуты тега 'Object':<br>"; foreach ($nObject->attributes as $attr) { echo "<b>".$attr->nodeName.":</b> ".$attr->nodeValue."<br>"; } } $nName = $nObject->getElementsByTagName('Name')->item(0); echo "<b>".$nName->nodeName.":</b><em>".$nName->nodeValue."</em>"; //end Object echo "<br><br>"; //Field if ($nField->hasAttributes()) { echo "Атрибуты тега 'Records':<br>"; foreach ($nField->attributes as $attr) { echo "<b>".$attr->nodeName.":</b> ".$attr->nodeValue."<br>"; } } $nName = $nField->getElementsByTagName('Name')->item(0); echo "<b>".$nName->nodeName.":</b><em>".$nName->nodeValue."</em>"; echo "<br>"; $nValue = $nField->getElementsByTagName('Value')->item(0); echo "<b>".$nValue->nodeName.":</b><em>".$nValue->nodeValue."</em>"; //end Field echo "<br><br>"; //Field1 if ($nField1->hasAttributes()) { foreach ($nField1->attributes as $attr) { echo "<b>".$attr->nodeName.":</b> ".$attr->nodeValue."<br>"; } } $nName = $nField1->getElementsByTagName('Name')->item(0); echo "<b>".$nName->nodeName.":</b><em>".$nName->nodeValue."</em>"; echo "<br>"; $nValue = $nField1->getElementsByTagName('Value')->item(0); echo "<b>".$nValue->nodeName.":</b><em>".$nValue->nodeValue."</em>"; //end Field1 echo "<br><br>"; //Field2 if ($nField2->hasAttributes()) { foreach ($nField2->attributes as $attr) { echo "<b>".$attr->nodeName.":</b> ".$attr->nodeValue."<br>"; } } $nName = $nField2->getElementsByTagName('Name')->item(0); echo "<b>".$nName->nodeName.":</b><em>".$nName->nodeValue."</em>"; echo "<br>"; $nValue = $nField2->getElementsByTagName('Value')->item(0); echo "<b>".$nValue->nodeName.":</b><em>".$nValue->nodeValue."</em>"; //end Field2 echo "<br><br>"; //Field3 if ($nField3->hasAttributes()) { foreach ($nField3->attributes as $attr) { echo "<b>".$attr->nodeName.":</b> ".$attr->nodeValue."<br>"; } } $nName = $nField3->getElementsByTagName('Name')->item(0); echo "<b>".$nName->nodeName.":</b><em>".$nName->nodeValue."</em>"; echo "<br>"; $nValue = $nField3->getElementsByTagName('Value')->item(0); echo "<b>".$nValue->nodeName.":</b><em>".$nValue->nodeValue."</em>"; //end Field3 echo "<br><br>"; //Field4 if ($nField4->hasAttributes()) { foreach ($nField4->attributes as $attr) { echo "<b>".$attr->nodeName.":</b> ".$attr->nodeValue."<br>"; } } $nName = $nField4->getElementsByTagName('Name')->item(0); echo "<b>".$nName->nodeName.":</b><em>".$nName->nodeValue."</em>"; echo "<br>"; $nValue = $nField4->getElementsByTagName('Value')->item(0); echo "<b>".$nValue->nodeName.":</b><em>".$nValue->nodeValue."</em>"; //end Field4 echo "<br><br>"; //Field5 if ($nField5->hasAttributes()) { foreach ($nField5->attributes as $attr) { echo "<b>".$attr->nodeName.":</b> ".$attr->nodeValue."<br>"; } } $nName = $nField5->getElementsByTagName('Name')->item(0); echo "<b>".$nName->nodeName.":</b><em>".$nName->nodeValue."</em>"; echo "<br>"; $nValue = $nField5->getElementsByTagName('Value')->item(0); echo "<b>".$nValue->nodeName.":</b><em>".$nValue->nodeValue."</em>"; //end Field5 echo "<br><br>"; //Field6 if ($nField6->hasAttributes()) { foreach ($nField6->attributes as $attr) { echo "<b>".$attr->nodeName.":</b> ".$attr->nodeValue."<br>"; } } $nName = $nField6->getElementsByTagName('Name')->item(0); echo "<b>".$nName->nodeName.":</b><em>".$nName->nodeValue."</em>"; echo "<br>"; $nValue = $nField6->getElementsByTagName('Value')->item(0); echo "<b>".$nValue->nodeName.":</b><em>".$nValue->nodeValue."</em>"; //end Field6 ?> </body> </html>
QUESTION: How to make it so that using this code you can parse all xml-ki, regardless of the number of fields in them? To parsil all existing fields ... This code only parsit specifically specified number of fields.