【问题标题】:xpath query on SimpleXML Document - Undefined offset: 0SimpleXML 文档上的 xpath 查询 - 未定义的偏移量:0
【发布时间】:2018-06-17 16:58:03
【问题描述】:

我对 SimpleXML 很陌生,并且在其中使用 xpath。我不确定是在原始帖子中还是在此处发布此查询,因此我在原始帖子中链接到此处。

在处理几个测试脚本时,我遇到了这个posting,我一直在尝试使一个被接受的答案起作用。 但是,当我尝试使用已接受答案工作的 xpath 版本时,我收到错误消息:

Undefined offset: 0 

我已经以其他方式测试了 xpath,以验证它是否已安装且功能正常。感谢您提供任何线索。

我已经复制了 OP 的 xml 文件以及接受的答案代码:

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>

PHP 代码:

<?php
$url = "test_b.xml";
$xml = simplexml_load_file($url);
$main_url = $xml->xpath('name[@id="minwage"]/full_image')[0];
?>

【问题讨论】:

  • 您的 xpath 表达式正在寻找一个名为 &lt;name&gt; 的元素,该元素不存在。你的意思是poster?
  • 我从此处的操作中复制了它:stackoverflow.com/questions/9696545/… 我也有同样的想法 - 在我的测试中,在 xpath 中使用“海报”有效...

标签: php arrays xml xpath simplexml


【解决方案1】:

您的 XPath 正在寻找一个名为 name 的不存在元素,但没有找到它。这意味着没有 0 元素可以使用 [0] 获取。我已将元素名称更改为 poster,在此示例中我获取 url 属性,但您可以将其更改为您需要的任何其他内容...

$main_url = $xml->xpath('//poster[@id="minwage"]/full_image/@url')[0];
echo $main_url;

给...

minwage.jpg

【讨论】:

  • 谢谢 - 很高兴知道我快到了。 [0] 是否在 @url 变量中指定了数组级别?
  • 当您使用xpath 时,它将返回一个匹配元素的数组。所以这只是[0] 将是第一个匹配的情况。
  • 还有一个问题......为什么不能将 url 放在括号中,而不是放在正斜杠之后,就像 id 和 poster 一样?例如xpath('//poster[id="minwage"]/full_image[url]')[0] 在xml中,看起来url是一个属性,就像id一样。我试过了,但它不起作用,但我不确定为什么。谢谢。 (注意:由于与用户混淆,我不得不在此处删除 @ 符号)。
  • XPath 表达式中的方括号稍有不同,如果您使用//full_image[@url],这意味着找到任何具有 url 属性的 full_image。而//full_image[url] 的意思是找到一个包含 url 元素的 full_image 元素。所以 [] 被用作 XPath 中的条件和 PHP 中的数组。
猜你喜欢
  • 2020-01-30
  • 1970-01-01
  • 2014-06-25
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
相关资源
最近更新 更多