2014-10-19 76 views
0

我想選擇標題值,其中屬性值大於1:選擇一個元素,它的兄弟姐妹包含屬性XML

path="//book/price[@value >1] 

我不完全知道如何只選擇其中的標題元素價格的屬性值大於1。我是一名XML初學者,我正在做一些教程練習。

我的首要任務是

  1. 學習XML
  2. 超級XML

XML:

<bookstore> 
<book> 
    <title lang="en">Harry Potter</title> 
    <price value="1">49.99</price> 
</book> 
<book> 
<title lang="en">Learning XML</title> 
<price value="2">29.95</price> 
</book> 
<book> 
    <title lang="en">super xml</title> 
    <price value="3">39.95</price> 
</book> 
</bookstore> 

更新

第一個查詢是完美的,你可以告訴我如何從嵌套元素中獲取它?

<bookstore> 
<book> 
    <title lang="en">Harry Potter</title> 
    <possibleprice> 
    <price value="1">49.99</price> 
    </possibleprice> 
</book> 
<book> 
    <title lang="en">Learning XML</title> 
    <possibleprice> 
    <price value="2">29.95</price> 
    </possibleprice> 
</book> 
<book> 
    <title lang="en">super xml</title> 
    <possibleprice> 
    <price value="3">39.95</price> 
    </possibleprice> 
</book> 
</bookstore> 
+2

你編輯實質性改變的問題,是有點不公平的matthias_h,誰正確地回答了原來的問題。(它還將非格式良好的XML引入混合中,在與XPath一起使用之前必須先解決這個問題。)您應該恢復編輯,接受matthias_h的答案,然後提出新問題。謝謝。 – kjhughes 2014-10-19 20:12:45

+0

我明白會做,不知道我做不了道歉 – 2014-10-19 20:15:03

+1

@kjhughes謝謝,我已經添加了OP的第一個版本到答案,所以它是有效的。 ArkhamRejek:我不介意更新OP,但在更新時,您可以按照以下步驟進行操作:保留OP,並在原始文件的下面寫上「更新」或其他問題,這樣它就不會太刺激/需要閱讀所有的答案和意見,以瞭解。我會更新我的答案以涵蓋第二個問題。但kjhughes在給出建議提出一個新問題時是正確的。如果別人會回答第二個問題,那會有點不公平,因爲你不可能同時接受這兩個問題。 – 2014-10-19 20:24:22

回答

3

例如:

對於OP的第一版本:

輸入:

<bookstore> 
<book> 
    <title lang="en">Harry Potter</title> 
    <price value="1">49.99</price> 
</book> 
<book> 
<title lang="en">Learning XML</title> 
<price value="2">29.95</price> 
</book> 
<book> 
    <title lang="en">super xml</title> 
    <price value="3">39.95</price> 
</book> 
</bookstore> 

的XPath:

//book/price[@value > 1]/preceding-sibling::title 

結果:

<title lang="en">Learning XML</title> 
<title lang="en">super xml</title> 

對於OP的更新的第二XML版本,作爲不同的示例:

的XPath:

//book/possibleprice/price[@value > 1]/ancestor::book/title 

同上結果。

要回答評論中的問題,是否有必要在第二版中使用前同胞兩次:否。 preceding-sibling的目標是當前節點的preceding-sibling。在這種情況下的當前節點是價格並且沒有兄弟姐妹,但是parent可能的價格。爲了獲得如上給出了不同的方式,相同的結果,這將是可能得到的parent價格然後preceding-siblingpossibleprice

//book/possibleprice/price[@value > 1]/parent::possibleprice/preceding-sibling::title 

導致相同。

正如提到,OP是XML初學者,也許下面的可能是有用的,說明XPath軸:http://www.xmlplease.com/axis

+0

假設該屬性被嵌套在另一個元素中。 我需要兩次使用先前的兄弟姐妹嗎?我會更新問題以澄清 – 2014-10-19 20:05:55

+0

非常感謝,並感謝您的資源!完美的作品 – 2014-10-19 20:37:50