XPATH选择NEAREST前面的节点

时间:2014-03-17 14:22:59

标签: xml xpath xpath-2.0

如何选择最近的名为BName的前一个节点,该节点没有一个名为&#34的父级;测试"在Xpath 2.0?

表达我想的是:

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

1 个答案:

答案 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"/>