PHP for循环只显示1个元素

时间:2013-12-19 15:41:42

标签: php xml for-loop

我尝试使用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.任何建议?

谢谢!

2 个答案:

答案 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/>';
}

Demo.

答案 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);
}