在SimpleXML和XPath中设置父节点变量

时间:2018-01-22 23:32:05

标签: php xml xpath simplexml

我正在使用PHP和SimpleXML / XPath,我只是想知道如何将某个父(具有某个属性值)设置为等于变量,我可以在'foreach'中使用它?

我目前收到此错误:

Notice: Array to string conversion

和此输出

Array

感谢任何线索。

这是php代码:

<?php
$url = "test_b.xml";


$xml = simplexml_load_file($url);

$xml_report_abbrev_b = $xml->xpath('//poster[@name="U-Verify"]')[0];

if($xml_report_abbrev_b){
    foreach($xml_report_abbrev_b as $node_a) {
        echo '<h1>'.$node_a->xpath('/full_image/@url').'</h1>';
    }
} else {
    echo 'XPath query failed';  
}

?>

这是xml:

<data>
  <poster name="U-Verify" id="uverify">
    <full_image url="u-verify.jpg"/>
    <full_other url=""/>
  </poster>
  <poster name="Minimum" id="min">
    <full_image url="min.jpg"/>
    <full_other url="spa_min.jpg"/>
  </poster>
</data>

1 个答案:

答案 0 :(得分:1)

直接使用SimpleXML的元素访问和属性访问而不是使用XPath查询将使代码更简单,性能更好。 您的代码可以缩减为......

$xml_report_abbrev_b = $xml->xpath('//poster[@name="U-Verify"]');

if($xml_report_abbrev_b){
    echo '<h1>'.$xml_report_abbrev_b[0]->full_image['url'].'</h1>';
} else {
    echo 'XPath query failed';
}

请注意echo行所示的方式 - 使用从XPath表达式中找到的<poster>元素,使用<full_image>元素并获取url属性。

我还将[0]移到if中,因为如果XPath没有找到值,则会产生错误,因为没有任何数据可以从中获取值。

这输出......

<h1>u-verify.jpg</h1>