2016-03-06 18 views
1

我有下面的XML:XML和作爲一個新的價值

<team> 
    <name>Sanha</name> 
    <players> 
     <player> 
     <name>Alberto Carreiras</name> 
     <skill>7</skill> 
     </player> 
     <player> 
     <name>Uông Bửu Đích</name> 
     <skill>8</skill> 
     </player> 
     ... 
    </players> 
    <sum>0</sum> 
</team> 

<team> 
... 
</team> 

有一個簡單而直接的方法來計算skill總和,並將其插入標籤?爲了實現以下結果:

<team> 
    <name>Sanha</name> 
    <players> 
     <player>... </player> 
     <player>...</player> 
     ... 
    </players> 
    <sum>15</sum> 
</team> 

我可以使用XPath的方法來得到的總和:

sum(/team/name["Sanha"]/following-sibling::players/player/skill) 

假設我有一個描述值的工作XSD文件。所有的字母都是xsd:string,所有的數字都是xsd:float。所有沒有限制。

但是我不知道如何解析這個值到sum標記。

+2

XPath允許您選擇輸入文檔中的節點並根據輸入計算值,因此您的XPath表達式將計算出總和,是的。但XPath不允許您創建新文檔或操作現有文檔,以添加需要XSLT或XQuery或DOM支持XPath的'sum'元素。 –

+0

謝謝你的回答。你能告訴我如何用XSLT來做到這一點嗎?我已經看到它就像XML和HTML的組合。如何計算標籤? –

+0

那麼,爲什麼'7'和'8'' 7.5'的總和?這不應該是'15'嗎? –

回答

0

如果要變換使用XSLT的文檔,然後使用與身份轉換模板以及模板供您想要達到的變化的樣式表:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="team[name = 'Sanha']/sum"> 
     <xsl:copy> 
      <xsl:value-of select="sum(../players/player/skill)"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:transform> 

我不知道你是否只想計算對於那個名字爲Sanha的球隊來說,如果你想爲所有球隊計算它,只需將匹配模式改爲<xsl:template match="team/sum">即可。

+0

''mean和''包圍了什麼?第二個''對我來說很清楚,比你的答案要清楚。 –

+0

請參閱http://www.usingxml.com/Transforms/XslIdentity或任何有關XSLT的書籍或教程,正如我在答案中所說的,它是身份轉換模板。 –

+0

http://www.xmlplease.com/xsltidentity也是該方法的一個很好的介紹。 –