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

Setting Parent Node Variable in SimpleXML and XPath

我正在使用 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>

直接使用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>