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

时间:2015-01-08 05:52:09

标签: xml xslt

我是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变量是不可变的,因此我无法执行以下操作。帮助我找到解决方案。

1 个答案:

答案 0 :(得分:0)

  

由于XSLT变量是不可变的,因此我无法执行以下操作。

我不知道哪些变量,不可变或不变,与它有关。这只是简单的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>