2011-03-22 72 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()總是返回數組。

相關問題