【问题标题】:XPATH to select NEAREST preceding nodeXPATH 选择 NEAREST 前一个节点
【发布时间】:2014-03-17 22:38:23
【问题描述】:

如何在 Xpath 2.0 中选择最近的名为 BName 且没有名为“Test”的父节点的先前节点?

我在想的表达是这样的:

preceding::BName[1](not[@parent::Test])

【问题讨论】:

  • 请张贴xml文件的样本

标签: xml xpath xpath-2.0


【解决方案1】:

试试

preceding::BName[not(parent::Test)][1]

说明

preceding::BName

以相反的文档顺序选择名称为 BName 的所有前面的节点。

preceding::BName[not(parent::Test)]

只保留没有名为Test 的父节点的节点,即删除所有具有Test 父节点的节点。

preceding::BName[not(parent::Test)][1]

选择第一个节点。由于节点集是逆文档顺序,因此这是离上下文节点最近的节点。

示例

给定文件

<Document>
    <Container>
        <BName id="1"/>
    </Container>
    <Container>
        <BName id="2"/>
    </Container>
    <Test>
        <BName id="3"/>
        <Context/>
    </Test>
</Document>

表达式

//Context/preceding::BName[not(parent::Test)][1]

选择节点

<BName id="2"/>

【讨论】:

  • 非常感谢!它完美地工作。我试图避免使用 GRANDPARENT 节点 = 测试的节点而不是父节点呢? [我会在 SO 中提出一个新问题]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多