simpleXML基于属性获取节点子节点

Den*_*one 3 php xml simplexml

我试图通过其中一个属性解析我引用的节点的值.但我不确定语法

XML:

<data>

  <poster name="E-Verify" id="everify">

    <full_image url="e-verify-swa-poster.jpg"/>

    <full_other url=""/>

  </poster>


  <poster name="Minimum Wage" id="minwage">

    <full_image url="minwage.jpg"/>

    <full_other url="spa_minwage.jpg"/>

  </poster>
</data>
Run Code Online (Sandbox Code Playgroud)

这里是我想要获取full_image的url值,其中poster id等于minwage:

$xml = simplexml_load_file('PosterData.xml');
$main_url = $xml->full_image[name] where poster[id] = "minwage";
//something like that.
echo $main_url;

Result: minwage.jpg
Run Code Online (Sandbox Code Playgroud)

如果有人有任何资源涵盖这些东西请分享.

小智 25

您应该能够使用SimpleXMLElement :: xpath()在简单的XML文档上运行xpath查询.

$xml = simplexml_load_file('PosterData.xml');
$main_url = $xml->xpath('name[@id="minwage"]/full_image')[0];

echo $main_url;
Run Code Online (Sandbox Code Playgroud)

  • 'name [@ id =“ minwage”]'中的“ name”不应该是“海报”吗?既然元素是“海报”元素? (4认同)

Wer*_*ner 7

只需循环播放海报元素并记住将属性值强制转换为字符串,因为您希望将它们(并可能将它们输出)作为字符串进行比较:

$xml = simplexml_load_file('PosterData.xml');

foreach ($xml->poster as $poster) {
    if ((string) $poster['id'] == 'minwage') {
        echo (string) $poster->full_image['url'];
    }
}
Run Code Online (Sandbox Code Playgroud)