Simplexml如何访问同一节点的所有元素

时间:2011-03-22 14:13:23

标签: simplexml

[Villa] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [VillaID] => 6
                [VillaName] => Mary
                [Distances] => SimpleXMLElement Object
                    (
                        [Distance] => Array
                            (
                                [0] => SimpleXMLElement Object
                                    (
                                        [Destination] => Sea
                                        [Value] => 1000 m
                                    )

                                [1] => SimpleXMLElement Object
                                    (
                                        [Destination] => Market
                                        [Value] => 800 m
                                    )
                            )
                    )
            )

        [1] => SimpleXMLElement Object
            (
                [VillaID] => 21
                [VillaName] => Marion
                [Distances] => SimpleXMLElement Object
                    (
                        [Distance] => Array
                            (
                                [0] => SimpleXMLElement Object
                                    (
                                        [Destination] => Beach
                                        [Value] => 5 min
                                    )

                            )
                    )
            )
    )

我需要打印所有,只有1个别墅(例如id = 6)但是VillaId不是一个数组所以不可能全部使用foreach

我可以用以下方式获得: echo'Villa的名字:'。$ xml-> Villa [0] - > VillaName。'
'; 等等...但是这样必须手动更改每个别墅(太多)括号中的值。 我尝试过$ xml-> Villa [$ value] - > VillaName; ($ value来自另一页)但它不起作用...... 坦克寻求帮助!

1 个答案:

答案 0 :(得分:0)

首先,您的问题始于“我有这个xml:”后面跟着不是 XML。我并不是说这是一个聪明的人,而是因为对于XML初学者而言,理解print_r() 是检查SimpleXMLElement的正确方法非常重要。有时它会显示不在XML中的内容,有时它不会显示XML中实际存在的内容。简而言之:不要在SimpleXMLElement上使用print_r() 。只需使用->asXML()并查看实际的XML。

根据我的理解,您希望根据某些条件找到并选择节点。 XML碰巧有一种语言:XPath。官方规格不是非常用户友好,而是w3schools.com has a pretty good XPath tutorial

  

我需要打印所有,只有1个别墅(例如id = 6)但是VillaId不是一个数组所以不可能全部使用foreach

在文档的任何位置,您要选择属性为Villa的所有VillaID个节点,其值为"6"。在XPath中:

//Villa[@VillaID="6"]

通过SimpleXML:

$xml->xpath('//Villa[@VillaID="6"]');

注意,xpath()总是返回一个数组。