2013-04-27 32 views
3

XML示例文件是:如何使用XPath計算最高值節點和最低值節點之間的差異?

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <book num="b1"> 
     <title>book1</title> 
     <author>auth1</author> 
     <price>5</price> 
    </book> 
    <book num="b2"> 
     <title>book2</title> 
     <author>auth2</author> 
     <price>10</price> 
    </book> 
    <book num="b3"> 
     <title>book2</title> 
     <author>auth1</author> 
     <price>12</price> 
    </book> 
</data> 

我需要返回一個值(最高價 - 最低價)。

data/book[not(../book/price> price)]/title 

給我的書的最高價格標題

data/book[not(../book/price<price)]/title 

給我的書的標題用最低的價格

,但我怎麼得到價值?

*我還需要返回誰寫2個或更多的書 我嘗試了所有作者:

//author[count(parent::book)>=1]/text() 

,但沒有成功:-(

回答

1

剛剛從最大值減去最小值:

data/book[not(../book/price > price)]/price 
- data/book[not(../book/price < price)]/price 

施加XSLT樣式表1.0內

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="text"/> 
    <xsl:template match="/"> 
     <xsl:value-of select="data/book[not(../book/price > price)]/price 
          - data/book[not(../book/price &lt; price)]/price" /> 
    </xsl:template> 
</xsl:stylesheet> 

如果你可以用的XPath 2.0,那麼你可以使用min()max()功能。一個XSLT內應用2.0樣式表

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="text"/> 
    <xsl:template match="/"> 
     <xsl:value-of select="max(data/book/price) - min(data/book/price)" /> 
    </xsl:template> 
</xsl:stylesheet> 

要找出發生兩次或兩次以上的作者,你可以使用以下XPath:

(/data/book/author[../following-sibling::book/author = .])[1] 
+0

謝謝先生。我正在使用:http://emdin.info/r/xpath_checker/我不知道我應該輸入什麼來獲得結果值...你能幫我嗎? – BlackMamba 2013-04-28 18:24:37

+0

該網站似乎不適用於任何/所有XPath語句。它可能期望XPath選擇並返回一個'node()'。您可能想嘗試另一個網站或工具。快速谷歌搜索發現這個工具,它確實產生數字5:http://www.freeformatter.com/xpath-tester.html – 2013-04-28 19:49:28

+0

謝謝先生。一切都像魅力一樣工作。 :-) – BlackMamba 2013-04-30 15:10:43

0

如果以前的答案找作者不工作,試試這個:

(/inventory/book/author[(../following-sibling::book/author = .) 

而不是

(../preceding-sibling::book/author = .)]) 
相關問題