php - 使用php遍历DOM、DomNodeList
问题描述
我想问一下为什么查询“团队”节点可以给我一些结果(计数= 1,长度= 1)而不是“根”或“子团队”。所有节点“根、团队和子团队”都是 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) }
谢谢
解决方案
您的 XPath 表达式缺少路径分隔符。
例如,如果您想要subteams
文档中的所有位置,请使用
$queryNode = $xpath->query("//subteams");
你也可以使用
$queryNode = $xpath->query("/root/team/subteams");
或者
$queryNode = $xpath->query("team/subteams");
"team"
之所以有效,是因为您的查询的默认上下文是文档元素,即<root>
.
推荐阅读
- objective-c - 如何使用 UTF-16 字符串(char16_t)初始化 NSString?
- java - 想在Spring中注入非静态内部类怎么办
- android - 默认小部件属性如何继承?
- flutter - Flutter 将 ThemeData 背景设置为 LinearGradient
- python - 如何在 Ubuntu 16.04 中模拟 xbox 360 控制器
- python - Qt - 在所有小部件上方显示小部件或标签
- r - 新的整洁的 eval 大括号 {{ }} 有什么作用?跨函数传递参数并使用 as_label
- regex - 返回第一个和第五个反斜杠之间的数据
- php - 如何在 php 中注销特定帐户(用户)?
- python - Python,将项目附加到列表不起作用