XML 值的总和作为新值

XML sum of values as a new value

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

如果您想使用 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">