PHP DOM XPath - 获取子元素和 self(使用带有上下文节点的查询)



例如,使用此XML...

<test>
  <tag0>
    <tag1 is="mine">
        <uselesstag>
            <tag3 is="mine">test</tag3>
        </uselesstag>
    </tag1>
    <tag2 is="mine">test2</tag2>
  </tag0>
</test>

。并获取上下文节点的元素(需要上下文节点(

$dom = new DomDocument;
$dom->loadXML($xml);
$xpath = new DomXPath($dom);
$context = $xpath->query("//tag1")->item(0);

。如何获得包含任何上下文节点子项的节点列表,并包含属性"is"等于"mine">的自身上下文节点?例如:我只想获取 tag1 和 tag3 元素(tag1 是上下文节点(

$res = $xpath->query('.//*[@is="mine"]',$context);

在这种情况下,节点列表中只有 tag3(子项(可用。

$res = $xpath->query('..//*[@is="mine"]',$context);

在这种情况下,标签 1(上下文节点(、标签 3(子节点(和标签 2(同级(在节点列表中可用。

XPath 有一个轴的概念。默认轴为 child 。像tag1这样的表达式实际上是child::tag1的简称。 //tag1/descendant::tag1的简称。这是其他轴,例如 descendant-or-self .

foreach ($xpath->evaluate('descendant-or-self::*[@is="mine"]', $context) as $node) {
  var_dump($node->localName);
}

输出:

string(4) "tag1"
string(4) "tag3"
$res = $xpath->query('.//self::node()[@is="mine"]',$context);

这行得通!

最新更新