[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来自另一页)但它不起作用......
坦克寻求帮助!
答案 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()
总是返回一个数组。