XML值的总和作为新值

时间:2016-03-06 12:35:12

标签: xml xpath xsd count sum

我有以下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标记。

1 个答案:

答案 0 :(得分: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">