我尝试使用PHP for
,我对它很陌生。我有一个xml
文件存储在名为$xmlroot
的变量中。在这里你可以看到我的代码:
<?php
$xmlroot = $_POST['xmldata'];
//echo "Your data is: " . $xmlroot;
$doc = new DOMDocument;
$doc->loadXML($xmlroot);
for($i = 0; $i < count($xmlroot); $i++){
echo $doc->getElementsByTagName('postalcode')->item($i)->nodeValue;
}
?>
但它只是显示第一个XML tag
。它应该显示所有称为“邮政编码”的标签。我的XML
文件如下所示:
<root>
<code>
<postalcode>12345</postalcode>
<name>Test1</name>
</code>
<code>
<postalcode>67890</postalcode>
<name>Test2</name>
</code>
<code>
<postalcode>13579</postalcode>
<name>Test3</name>
</code>
<code>
<postalcode>02468</postalcode>
<name>Test1</name>
</code>
</root>
它应该显示4个元素,但它只显示1.任何建议?
谢谢!
答案 0 :(得分:6)
这是因为count($xmlroot)
等于1
。如果您要使用for
循环,则需要使用length
属性来检索元素数。
但foreach
循环更容易:
$xmlroot = file_get_contents('file.html');
$doc = new DOMDocument;
$doc->loadXML($xmlroot);
foreach ($doc->getElementsByTagName('postalcode') as $postalcode) {
echo $postalcode->nodeValue . '<br/>';
}
答案 1 :(得分:1)
在php中使用simplexml类:
e.g。
<强> PHP 强>
<?php
$xml = simplexml_load_string("<root>
<code>
<postalcode>12345</postalcode>
<name>Test1</name>
</code>
<code>
<postalcode>67890</postalcode>
<name>Test2</name>
</code>
<code>
<postalcode>13579</postalcode>
<name>Test3</name>
</code>
<code>
<postalcode>02468</postalcode>
<name>Test1</name>
</code>
</root>");
echo "<pre>";
print_r($xml);
echo "</pre>";
?>
输出:
SimpleXMLElement Object
(
[code] => Array
(
[0] => SimpleXMLElement Object
(
[postalcode] => 12345
[name] => Test1
)
[1] => SimpleXMLElement Object
(
[postalcode] => 67890
[name] => Test2
)
[2] => SimpleXMLElement Object
(
[postalcode] => 13579
[name] => Test3
)
[3] => SimpleXMLElement Object
(
[postalcode] => 02468
[name] => Test1
)
)
)
所以,要迭代,你要做的是:
foreach ($xml->code as $node)
{
// Do something with $node - e.g.
$postalcode = $node->postalcode;
var_dump($postalcode);
}