2011-03-22 73 views
0
[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得到所有的SimpleXML如何访问同一节点的所有元素

我可以通过以下方式获得: echo'别墅名称:'。$ xml->别墅[0] - >别墅名称'。
'; 等等......但这样不得不为每个别墅(太多)手动更改括号中的值。 我试过用$ xml-> Villa [$ value] - > VillaName; ($价值来自另一页),但它不工作... 坦克求救!

回答

0

首先,你的问题与启动“我有这样的XML:”后面的东西是不XML。我不是说这是一个聪明的人,而是因为重要的是XML初学者要明白print_r()而不是正确的方式来检查SimpleXMLElement s。有时它会向您显示不在您的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()总是返回数组。

相关问题