2014-08-29 177 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

相關問題