代码之家  ›  专栏  ›  技术社区  ›  Maciek

PHP简单XML Xpath上移树(带名称的父级)

  •  0
  • Maciek  · 技术社区  · 1 年前

    我使用Xpath和SimpleXML来查找子元素,如下所示:

    $child=$file->xpath('//w:child')[0];
    

    如果我想选择父项,我可以执行以下操作:

    $parent=$child->xpath('..')[0];
    

    但是,如果我想在树的任何级别上找到一个名为“any_parent”的父代或祖父母,该怎么办。例如

    $any_parent=$child->xpath('any_parent//..')[0];
    

    这可能吗?我希望它是相对于 $child 。然后向上移动树并选择标记 any_parent 。有办法做到这一点吗?

    1 回复  |  直到 1 年前
        1
  •  2
  •   hakre    1 年前

    是的,这是 ancestor

    您正在查找名为的元素节点 any_parent :

    ancestor::any_parent
    

    ^那是轴的名称( 祖宗 , see all ),两个冒号(“::”)和节点测试,这里是元素名称。

    PHP/SimpleXMLElement:

    $any_parent = $child->xpath('ancestor::any_parent')[0];
    

    笔记 由于可能没有或有多个,直接访问 [0] 可能会给你带来意想不到的结果。

    您可以提供默认值 null 例如表示找不到任何节点和位置测试表示您想要的第一个节点具体如下:

    $any_parent = $child->xpath('ancestor::grandparent[1]')[0] ?? null;
    

    [$any_parent] = $child->xpath('ancestor::grandparent[1]') + [null];