考虑以下XML:
<?xml version="1.0" encoding="utf-8"?>
<movies xmlns:en="http://english-language.com/">
<en:movie>
<title>The Godfather</title>
</en:movie>
<en:movie>
<title>Saving Private Ryan</title>
</en:movie>
<something-something xmlns:en="http://english.com/">
<en:movie>
<title>The Fellowship of the Ring</title>
</en:movie>
</something-something>
</movies>
下面的这段代码将匹配The Godfather和Saving Private Ryan。但为什么?我期望它会失败。似乎查询忽略了名称空间名称(URI),而使用了名称空间前缀
$xpath = new DOMXpath($dom);
$xpath->registerNamespace('en', 'http://complete-nonsense');
$elements = $xpath->query("//en:movie");
我希望下面的代码匹配The Fellowship of the Ring] >>,但它再次匹配The Godfather和Saving Private Ryan。
匹配。$xpath = new DOMXpath($dom); $xpath->registerNamespace('en', 'http://english.com/'); $elements = $xpath->query("//en:movie");
现在只是URI似乎没有什么区别,现在它与指环的奖学金
$xpath = new DOMXpath($dom); $xpath->registerNamespace('english', 'http://english.com/'); $elements = $xpath->query("//english:movie");
为什么? PHP的实现有问题吗?
请考虑以下XML:
DOMXpath::evaluate()
/ DOMXpath::query()
将当前上下文节点的名称空间定义注册在手动注册的名称之上。基本上,文档将覆盖名称空间作为前缀。第三个参数(因为PHP> = 5.3.3)可以禁用自动注册: