为什么DOMXPath不起作用?

soa*_*gem 1 php xpath domdocument domxpath

我一直在尝试编写一个PHP脚本来使用DOMXPath解析XML文档; 但似乎我遗漏了一些东西,因为我的XPath查询都没有返回任何内容.所以我试图淡化我的脚本来尝试解析一个非常基本的XML文档,而这也不起作用.我已将此脚本基于此XPath示例.

<?php

$xml  = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml .= '<bookstore>';
$xml .= '<book category="COOKING">';
$xml .= '<title lang="en">Everyday Italian</title>';
$xml .= '<author>Giada De Laurentiis</author>';
$xml .= '<year>2005</year>';
$xml .= '<price>30.00</price>';
$xml .= '</book>';
$xml .= '</bookstore>';

$dom = new DOMDocument('1.0');
$dom->loadXML($xml);

$xpath = new DOMXPath($dom);
$result = $xpath->query('/bookstore/book[1]/title');
var_dump($result);

?>
Run Code Online (Sandbox Code Playgroud)

问题是$ result的var_dump 总是返回如下内容:

object(DOMNodeList)#4 (0) { }
Run Code Online (Sandbox Code Playgroud)

......表明它一无所获.

Vol*_*erK 5

在这种情况下,var_dump()的输出具有误导性.尝试

foreach($result as $e) {
  echo $e->nodeValue;
}
Run Code Online (Sandbox Code Playgroud)

要么

echo $result->length;
Run Code Online (Sandbox Code Playgroud)

代替.

例如使用你的代码(直到$ result = $ xpath ....)+

echo phpversion(), "\n";
var_dump($result);
echo $result->length, "\n";
foreach($result as $e) {
  echo $e->nodeValue;
}
Run Code Online (Sandbox Code Playgroud)

输出是

5.3.1
object(DOMNodeList)#4 (0) {
}
1
Everyday Italian
Run Code Online (Sandbox Code Playgroud)