2014-08-29 139 views
0

我有,例如,下面的XML片段包含XPath中选择封闭标签

<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> 

我想选择哪个与他们的祖先@num>3一起level2节点,即获得

<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?

的例子是非常简单和一般所选节点可以位于任意深度,和溶液应比例

回答

1

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

+0

谢谢@IanRoberts。然后我会看看XQuery。 – yb011 2014-08-29 13:55:42

相关问题