XPath - 如何从未确定的深度获取父节点

时间:2017-12-28 16:53:13

标签: xml xpath

让我们假设我有一个如下所示的XML:

<?xml version="1.0" encoding="UTF-8"?>
<root identifier="m1">
  <orgs default="toc00001">
    <org identifier="toc00001">
      <item identifier="itm00012">
        <title>aaa</title>
        <item identifier="a123">
          <title>bbbb</title>
        </item>
      </item>
      <item identifier="itm00001">
        <title>Some text</title>
        <item identifier="itm00027">
          <title>Something</title>
          <item identifier="itm00028">
            <title>Another text</title>
          </item>
        </item>
      </item>
    </org>
  </orgs>
</root>

我在代码中有一个标识符为itm00028的节点。我想使用xpath 1.0获取父项(org节点正下方的那个)。

类似的东西:

//item[@identifier="itm00028"]/ancestor::item/some other condition

4 个答案:

答案 0 :(得分:1)

我实际上先得到org然后得到项目:

//item[@identifier="itm00028"]/ancestor::org/item

所以你要确定你真正想要的是什么。

答案 1 :(得分:0)

怎么样:

mydata %>%
  arrange(desc(id))

以及之前的评论:

//item[@identifier="itm00028"]/../../item[1]/title

答案 2 :(得分:0)

建议的回答都不是我想要的。

//item[@identifier="itm00028"]/ancestor::item[1]假设我需要事先知道深度。我在问题中说过,深度可以是任意的,从1到大数。

//item[@identifier="itm00028"]/ancestor::org/item不正确,因为它检索第一个子项目节点。我需要实际包含我开始的项目的节点。

//item[@identifier="itm00028"]/../../item[1]/title再次假设xml的固定结构。

这就是我需要的:

//org/item[descendant::item[@identifier="itm00028"]]

答案 3 :(得分:0)

ancestor::org/child::item[.//item[@identifier = 'itm00028']]

//item[@identifier="itm00028"]/ancestor::org/child::item[.//item[@identifier = 'itm00028']]

如果您正在寻找它,请告诉我。