例如,我有以下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
节点@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::*
产生所有祖先及其内容:
<rootnode>
<level1 num="1">
<level2 num="1">1.1</level2>
<level2 num="2">1.2</level2>
<level2 num="3">1.3</level2>
</level1>
<!-- ... 25 lines cut -->
我了解这两种表达方式的工作原理,以及为什么它们不符合我的需求。什么是实现无XSLT预期结果的最简单的方法?
该示例非常简单,通常选定的节点可以任意放置在较深的位置,并且解决方案应按比例缩放。
您不能使用纯XPath来做到这一点,因为XPath是一种用于从XML树中选择现有节点的语言,而您想要构建与原始树不同的全新树。要构建这样的新树,您需要使用通用编程语言中的高级工具(例如XSLT或XQuery)或合适的XML操作库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句