使用php遍历DOM,DomNodeList

时间:2018-04-29 22:53:20

标签: php dom traversal

我想问为什么查询"团队"节点可以给我一些结果(count = 1,length = 1)但不能" root"或者" subteam"。所有节点" root,team和subteam"是Nodelist类型。

如果我没有弄错,计数1代表列表中的节点数。那么为什么" root"和" subteam"返回0。

$dom = new DomDocument();
$string = <<<XML
<?xml version='1.0'?> 
<root> 
<teams>
<subteams>
    <cmd>login</cmd> 
    <login>Richard</login> 
</subteams>
</teams>

</root> 
XML;


$dom->loadXML($string);

$xpath = new DomXPath($dom);
/*DOMNodeList*/
$queryNode = $xpath->query("subteams"); //length 0, count 0
//$queryNode = $xpath->query("root"); //length 0, count 0
//$queryNode = $xpath->query("teams"); //length 1, count 1

echo "length " . $queryNode->length . "<br>";
echo "count " . $queryNode->count() . "<br>";
var_dump( $queryNode); // only for teams node - object(DOMNodeList)#4 (1) { ["length"]=> int(1) }

由于

Please see DOM picture

1 个答案:

答案 0 :(得分:0)

您的XPath表达式缺少路径分隔符。

例如,如果您希望文档中的任何位置都显示subteams,请使用

$queryNode = $xpath->query("//subteams");

您也可以使用

$queryNode = $xpath->query("/root/team/subteams");

$queryNode = $xpath->query("team/subteams");

"team"有效,因为查询的默认上下文是文档元素,即<root>

请参阅https://www.w3.org/TR/xpath-30/#id-path-expressions