©
本文档使用 PHP中文网手册 发布
(PHP 5, PHP 7)
Supports XPath 1.0
$doc
)$expression
[, DOMNode $contextnode
[, bool $registerNodeNS
= true
]] )$expression
[, DOMNode $contextnode
[, bool $registerNodeNS
= true
]] )$prefix
, string $namespaceURI
)$restrict
] )[#1] archimedix32783262 at mailinator dot com [2014-09-03 12:03:48]
Note that evaluate() will use the same encoding as the XML document.
So if you have a UTF-16 XML, you will have to query using UTF-16 strings.
You can use iconv() to convert from your code's encoding to the target encoding for better legibility.
[#2] dhz [2011-01-05 10:47:20]
I just spent far too much time chasing this one....
When running an xpath query on a table be careful about table internal nodes (ie: <tr></tr>, and <td></td>). If the master <table> tag is missing, then query() (and likely evaluate() also) will return unexpected results.
I had a DOMNode with a structure like this:
<td>
<table></table>
<table>
<tr>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
</td>
Upon which I was trying to do a relative query (ie: <?php $xpath_obj->query('my/x/path', $relative_node); ?>).
But because of the lone outer <td></td> tags, the inner tags were being invalidated, while the nodes were still recognized. Meaning that the following query would work:
<?php $xpath_obj->query('*[2]div[@id='yourTagIdHere']");
if (!is_null($elements)) {
foreach ($elements as $element) {
echo "<br/>[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->nodeValue. "\n";
}
}
}
?>