XSLT 聚合 XML 标记值并存储新标记

XSLT aggregating XML tag values and storing new tag

我是 xslt 的新手,正在尝试使用 XSLT 在 XML 以下进行处理:

<xml>
<characters>
<char a="a1" b="b1" y="y1" z="z1"  weight="100">F</char>
<char a="a2" b="b2" y="y2" z="z2"  weight="80">r</char>
<char a="a3" b="b3" y="y3" z="z3"  weight="80">o</char>
<char a="a4" b="b4" y="y4" z="z4"  weight="100">m</char>
</characters>
</xml>

产生输出 XML :

<word>
<value>From</value>
<coordinates>a1 b1 y4 z4</coordinates>
<avgWeight>90</avgWeight>
</word>

其中坐标构成第一个和最后一个字符的坐标,avgWeight 聚合权重标签的值。

由于 XSLT 变量是不可变的,我无法执行以下操作。帮助我找到解决方案。

Since XSLT variables are immutable, I'm unable perform below operation.

我看不出有什么变量,不可变的或不可变的,与它有什么关系。这只是简单的 XSLT:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:template match="/xml">
    <xsl:for-each select="characters">
        <word>
            <value>
                <xsl:for-each select="char">
                    <xsl:value-of select="."/>
                </xsl:for-each>
            </value>
            <coordinates>
                <xsl:value-of select="char[1]/@a"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="char[1]/@b"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="char[last()]/@y"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="char[last()]/@z"/>
            </coordinates>
            <avgWeight>
                <xsl:value-of select="sum(characters/char/@weight) div count(characters/char) "/>
            </avgWeight>
        </word>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>