【问题标题】:Using xpath with SimpleXMLElement returning blank result?使用 xpath 和 SimpleXMLElement 返回空白结果?
【发布时间】:2012-09-07 01:31:11
【问题描述】:

XML:

<A>
  <B type="source">
    <C>
      <D>
        <E ref="description">my_desc</E>
        <E>Some other E</E>
      </D>
    </C>
  </B>
</A>

PHP:

$doc = new SimpleXMLElement('URL.xml', null, true);
$path = $doc->xpath('A/B[@type="source"]/C/D/E[@ref="description"]');
var_dump ($path);

返回:

Array
(
)

最终,我试图用ref="description" 获得&lt;E&gt; 的内部值。我究竟做错了什么?以下指南来自:http://php.net/simplexmlelement.xpath

【问题讨论】:

  • 您是否在查询结束时使用 /text() 尝试过此操作?
  • $doc-&gt;xpath('A/B[@type="source"]/C/D/E[@ref="description"]/text()');$doc-&gt;xpath('A/B[@type="source"]/C/D/E[@ref="description"]')-&gt;text();?两者都不会产生不同的结果。
  • 在查询开头添加 //。 //A/B[@type="source"]/C/D/E[@ref="description"] 有效

标签: php xpath simplexml


【解决方案1】:

使用你提供的XML,下面的代码会打印出E的字符串值:

$doc = new SimpleXMLElement('URL.xml', null, true);
$path = $doc->xpath('/A/B[@type="source"]/C/D/E[@ref="description"]');
echo $path[0];

您需要以 / 开始查询以指定文档根目录。

你也可以只查询 //E[@ref="description"] 来找到你想要的所有 E 元素。

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 2016-04-08
    • 2017-01-29
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多