我想问为什么查询"团队"节点可以给我一些结果(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) }
由于
答案 0 :(得分:0)
您的XPath表达式缺少路径分隔符。
例如,如果您希望文档中的任何位置都显示subteams
,请使用
$queryNode = $xpath->query("//subteams");
您也可以使用
$queryNode = $xpath->query("/root/team/subteams");
或
$queryNode = $xpath->query("team/subteams");
"team"
有效,因为查询的默认上下文是文档元素,即<root>
。