【问题标题】:PHP for loop just displays 1 elementPHP for 循环只显示 1 个元素
【发布时间】:2014-01-08 06:18:31
【问题描述】:

我尝试使用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 个。有什么建议吗?

谢谢!

【问题讨论】:

    标签: php xml for-loop


    【解决方案1】:

    这是因为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.

    【讨论】:

    • 不错!你做到了。非常感谢!首先我尝试了length 属性,它不起作用,但后来我注意到了你的编辑。 Foreach 完美运行 :) 谢谢!
    【解决方案2】:

    在php中使用simplexml类:

    例如

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 2018-02-08
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多