在XPath选择中包含封闭标记

时间:2014-08-29 13:40:27

标签: xpath

例如,我有以下xml代码段

<rootnode>
    <level1 num="1">
        <level2 num="1">1.1</level2>
        <level2 num="2">1.2</level2>
        <level2 num="3">1.3</level2>
    </level1>
    <level1 num="2">
        <level2 num="1">2.1</level2>
        <level2 num="2">2.2</level2>
        <level2 num="3">2.3</level2>
        <level2 num="4">2.4</level2>
        <level2 num="5">2.5</level2>
    </level1>
    <level1 num="3">
        <level2 num="1">3.1</level2>
        <level2 num="2">3.2</level2>
        <level2 num="3">3.3</level2>
        <level2 num="4">3.4</level2>
    </level1>
</rootnode>

我想选择与他们的祖先一起level2的{​​{1}}个节点,即获取

@num>3

表达式<rootnode> <level1 num="2"> <level2 num="4">2.4</level2> <level2 num="5">2.5</level2> </level1> <level1 num="3"> <level2 num="4">3.4</level2> </level1> </rootnode> 产量

//level1/level2[@num>3]

<level2 num="4">2.4</level2> <level2 num="5">2.5</level2> <level2 num="4">3.4</level2> 产生所有祖先及其内容:

//level1/level2[@num>3]/ancestor::*

我理解这两个表达式是如何工作的以及它们不适合我的需求的原因。 在没有xslt的情况下,实现理想结果的最简单方法是什么?

示例非常简单,一般所选节点可以任意位置解决方案应该扩展

1 个答案:

答案 0 :(得分:1)

您不能使用纯XPath执行此操作,因为XPath是从XML树中选择现有节点的语言,而您希望构建一个全新的树与原来的树不同。要构建这样的新树,您需要使用更高级别的工具,如XSLT或XQuery,或者使用通用编程语言中的合适XML操作库。