例如,我有以下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的情况下,实现理想结果的最简单方法是什么?
示例非常简单,一般所选节点可以任意位置,解决方案应该扩展。
答案 0 :(得分:1)
您不能使用纯XPath执行此操作,因为XPath是从XML树中选择现有节点的语言,而您希望构建一个全新的树与原来的树不同。要构建这样的新树,您需要使用更高级别的工具,如XSLT或XQuery,或者使用通用编程语言中的合适XML操作库。