使用以下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测试人员时,我得到了预期的结果,即&#34; John&#34;
我似乎无法使用substring()和substring-after()获得任何结果。是PHP的DOMX路径,还是我做错了什么?
答案 0 :(得分:3)
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 > Return Values:
任何不返回节点的表达式都将返回空
DOMNodeList
。