2016-01-09 149 views
1

我有下面這個xml結構。對於每個'地點'(在每個「土地」),我需要'id'值,它是'sneeuwkwaliteit'。用simplexml解析複雜的xml

我的努力,到目前爲止,並沒有返回「sneeuwkwaliteit」的值:

$sneeuw = simplexml_load_file('ski.xml'); 
echo $sneeuw->land[0]->locaties[0]->sneeuw->{'ski'}->sneeuwkwaliteit; 


<sneeuw> 
    <aanmaak_tijd>09-01-2016 07:48</aanmaak_tijd> 
    <landen> 
    <land id="Andorra"> 
     <locaties> 
     <locatie id="Arinsal/Pal"> 
      <ski> 
      <datum_tijd>09-01-2016</datum_tijd> 
      <sneeuwhoogte_dal>40</sneeuwhoogte_dal> 
      <sneeuwhoogte_berg>70</sneeuwhoogte_berg> 
      <sneeuwkwaliteit>De aanwezige sneeuw is poedersneeuw.</sneeuwkwaliteit> 
      <datum_laatste_sneeuwval>07-01-2016</datum_laatste_sneeuwval> 
      <hoeveelheid_laatste_sneeuwval>20</hoeveelheid_laatste_sneeuwval> 
      <totaal_aantal_liften>25</totaal_aantal_liften> 
      <aantal_liften_geopend>25</aantal_liften_geopend> 
      </ski> 
     </locatie> 
     </locaties> 
    </land> 
    </landen> 
</sneeuw> 
+1

試圖縮進的XML,以便看到結構更好,也許使用'landen [0]'而不是'land [0]'。我不知道關於PHP,但如果這是一個JSON對象,我會像這樣遍歷它:'sneeuw.landen [0] .locaties [0] .ski.sneeuwkwaliteit' –

+0

「landen」和「土地「(他們也可能是」富「和」酒吧「)。您必須解決所有級別:sneeuw.landen [0] .land [0] .locaties [0] .locatie [0] .ski [0] .sneeuwkwaliteit。您可能會省略[0],其中多個條目是不可能的。 – TheRoadrunner

回答

1

只要認真遵循從XML的根目標元素的路徑:

$xml = <<<XML 
<sneeuw> 
    <aanmaak_tijd>09-01-2016 07:48</aanmaak_tijd> 
    <landen> 
    <land id="Andorra"> 
     <locaties> 
     <locatie id="Arinsal/Pal"> 
      <ski> 
      <datum_tijd>09-01-2016</datum_tijd> 
      <sneeuwhoogte_dal>40</sneeuwhoogte_dal> 
      <sneeuwhoogte_berg>70</sneeuwhoogte_berg> 
      <sneeuwkwaliteit>De aanwezige sneeuw is poedersneeuw.</sneeuwkwaliteit> 
      <datum_laatste_sneeuwval>07-01-2016</datum_laatste_sneeuwval> 
      <hoeveelheid_laatste_sneeuwval>20</hoeveelheid_laatste_sneeuwval> 
      <totaal_aantal_liften>25</totaal_aantal_liften> 
      <aantal_liften_geopend>25</aantal_liften_geopend> 
      </ski> 
     </locatie> 
     </locaties> 
    </land> 
    </landen> 
</sneeuw> 
XML; 
$sneeuw = simplexml_load_string($xml); 
echo $sneeuw->landen[0]->land[0]->locaties[0]->locatie[0]->ski[0]->sneeuwkwaliteit; 

eval.in demo

輸出:

De aanwezige sneeuw is poedersneeuw. 

爲了針對XML更復雜的查詢,看看XPath,它有它自己的規範。然後您可以使用SimpleXMLElement::xpath()函數執行XPath表達式。

UPDATE:

您可以使用XPath,如上面提到的,通過在同一路徑上的所有sneeuwkwaliteit元素迭代:

.... 
$result = $sneeuw->xpath('/sneeuw/landen/land/locaties/locatie/ski/sneeuwkwaliteit'); 
foreach($result as $r){ 
    echo $r ."<br>"; 
} 
+0

這太棒了。是否可以爲每個循環創建一個,因爲這是第一個集合(0)。 – mark

+0

@mark請參閱**更新**部分的一種可能的方法 – har07