可以';无法使PHP DOMXpath子字符串函数正常工作


Can't get PHP DOMXpath substring functions to work

使用以下PHP代码示例:

$xml = "<person><name>John-Doe</name></person>";
$doc = new DOMDocument("1.0", "ISO-8859-15");
$xpath = new DOMXpath($doc);
$nodelist = $xpath->query("substring-before(/person/name/text(), '-Doe')");
print "Found " . $nodelist->length . " results.";

我得到输出:

找到0个结果

但是,当我将相同的XML和xpath查询放入在线xpath测试人员中时,我得到了预期的结果,即"John"

我似乎也无法使用substring()和substring-after()得到任何结果。是PHP的DOMXpath出了问题,还是我做错了什么?

XPath substring-before()函数返回string而不是节点,并且不应该使用DOMXPath::query()来执行不返回节点*的XPath表达式。DOMXPath::evaluate()是此处要使用的正确函数:

$xml = "<person><name>John-Doe</name></person>";
$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXpath($doc);
$result = $xpath->evaluate("substring-before(/person/name/text(), '-Doe')");
print $result;

eval.in demo

输出:

John

*)引用自DOMXPath::query>返回值

任何不返回节点的表达式都将返回一个空的DOMNodeList