如何在PHP中循环使用SimpleXML对象?

时间:2013-12-09 02:28:57

标签: php xml

我无法想出这个:

$xml = simplexml_load_string($result);

这导致以下结果(我可以通过视图> Chrome中的来源看到):

(
[option] => Array
    (
        [0] => abc1234
        [1] => def11234
        [2] => ghi1234
        [3] => jkl1234           
    )
[items] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [total] => 300
            )
        [item] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [name] => NAME1
                            )
                        [urls] => SimpleXMLElement Object
                            (
                                [@attributes] => Array
                                    (
                                        [url] => example.com
                                        [img] => /image1.png
                                    )
                            )
                    )
                [1] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [name] => NAME2
                            )

                        [urls] => SimpleXMLElement Object
                            (
                                [@attributes] => Array
                                    (
                                        [url] => example2.com
                                        [img] => /image2.png
                                    )
                            )                          
                    )
            )
    )
)

这是包含数千个结果的数组的一部分。我需要的数据位于“名称”,“网址”和“图片”字段中。我搜索了很多,但唯一有效的是提取我甚至不需要的“选项”值。

如何提取这些值?谢谢

2 个答案:

答案 0 :(得分:1)

答案归结为语法:

foreach($xml->items->item as $items) {

    print $items->attributes()->name.'<br>';

}

我没有意识到'属性'是需要命名的节点的一部分,你需要将其称为'attributes()。生活和学习。

答案 1 :(得分:0)

我知道,循环元素的最简单方法只是一个foreach循环:

foreach($xml as $item)

然后,只需查看每个元素的数据类型。如果它是某种关联数组,则使用键进行访问(如果是SimpleXMLObject),将该元素作为对象属性进行访问。

当然,这可能取决于您的XML嵌套程度,以及您拥有多少。一些XSL也可能为您省去一些麻烦。