PHP DOM XPath-获取子元素和self(使用带有contextnode的查询)
以这个XML为例PHP DOM XPath-获取子元素和self(使用带有contextnode的查询),php,xml,xpath,Php,Xml,Xpath,以这个XML为例 <test> <tag0> <tag1 is="mine"> <uselesstag> <tag3 is="mine">test</tag3> </uselesstag> </tag1> <tag2 is="mine">test2</tag2> </tag0>
<test>
<tag0>
<tag1 is="mine">
<uselesstag>
<tag3 is="mine">test</tag3>
</uselesstag>
</tag1>
<tag2 is="mine">test2</tag2>
</tag0>
</test>
。。。如何获取包含任何contextnode子节点并包含属性“is”等于“mine”的自contextnode的节点列表?例如:我只想获取tag1和tag3元素(tag1是contextnode)
在这种情况下,节点列表上只有tag3(子项)可用
$res = $xpath->query('..//*[@is="mine"]',$context);
$res = $xpath->query('.//self::node()[@is="mine"]',$context);
在本例中,节点列表上有tag1(上下文节点)、tag3(子节点)和tag2(同级节点)
$res = $xpath->query('..//*[@is="mine"]',$context);
$res = $xpath->query('.//self::node()[@is="mine"]',$context);
这管用 XPath有一个轴的概念。默认轴为
子轴
。像tag1
这样的表达式实际上是child::tag1
的缩写形式//tag1
是/genderant::tag1
的缩写形式。以下是其他轴,如后代或self
foreach ($xpath->evaluate('descendant-or-self::*[@is="mine"]', $context) as $node) {
var_dump($node->localName);
}
输出:
string(4) "tag1"
string(4) "tag3"