PHP XML库不返回XPath结果

Rus*_*man 1 php xml xpath simplexml domdocument

我试图使用PHP和XPath从这个XML中获取 ID元素为1364的所有Category节点:http://education.oracle.co.uk/html/oracle/28US/schedule.xml

我的代码目前看起来像这样:

$schedule = new SimpleXMLElement("schedule.xml", null, true);
$nodes = $schedule->xpath("//category[id=1364]");
if(!$nodes) {
    echo "No xpath results.";
} else {
    echo count($nodes)." results.";
}
Run Code Online (Sandbox Code Playgroud)

XPath不返回任何结果.我已使用其他XPath查询程序检查了查询,并返回了结果.

上面的代码使用SimpleXML,但是在使用DOMDocument时我遇到了完全相同的问题.在SimpleXML和DOMDocument中,运行XPath"//*"都有效,返回文档中的所有节点.

谢谢!

jas*_*sso 5

一个疯狂的猜测,这是命名空间问题

您的XML文档可能包含这样的内容

<root xmlns="http://some.uri">
    <category id="1364"/>
</root>
Run Code Online (Sandbox Code Playgroud)

因为<category>它在默认命名空间中没有任何前缀,但为了使XPath工作,您还需要将此命名空间绑定到某个前缀,然后在XPath表达式中使用该前缀.

$schedule->registerXPathNamespace("ns", "http://some.uri");
$nodes = $schedule->xpath('//ns:category[id=1364]');
Run Code Online (Sandbox Code Playgroud)

没有名称空间前缀的XPath(1.0)表达式始终只与无名称空间中的目标匹配.