使用simplexml解析复杂的xml

时间:2016-01-09 11:08:49

标签: php xml simplexml

我在下面有这个xml结构。对于每个'locatie'(在每个'陆地'),我需要'id'值,它是'sneeuwkwaliteit'。

到目前为止,我的努力并未返回'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 个答案:

答案 0 :(得分: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表达式。

更新:

如上所述,您可以使用XPath迭代位于同一路径中的所有sneeuwkwaliteit元素:

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