0

私は以下のxmlを持っています

   <pair>
            <name>ABC</name>
            <value>10</value>
    </pair>
    <pair>
            <name>ABC</name>
            <value>50</value>
    </pair>
    <pair>
            <name>XYZ</name>
            <value>30</value>
    </pair>

にカバーする必要があります

<pair>
        <name>ABC</name>
        <value>60</value>
</pair>
<pair>
        <name>XYZ</name>
        <value>30</value>
</pair>

つまり、名前と値のペアで名前が同じ場合です。同じ名前に対する値は、出力 xml に追加する必要があります。誰でも助けてもらえますか?

4

2 に答える 2

1

XML:

<parent>
    <pair>
        <name>ABC</name>
        <value>10</value>
    </pair>
    <pair>
        <name>ABC</name>
        <value>50</value>
    </pair>
    <pair>
        <name>XYZ</name>
        <value>30</value>
    </pair>
</parent>

XSLT:

<xsl:template match="/">
        <parent>
            <xsl:for-each select="//parent/pair[not(name=preceding::pair/name)]">
                <xsl:variable name="curName" select="name" />
                <pair>
                <name>
                <xsl:value-of select="name"/>
                </name>
                <value>
                <xsl:value-of select="sum(/parent/pair[name = $curName]/value)"/>
                </value>
                </pair>
            </xsl:for-each>
        </parent>
</xsl:template>

また:

<xsl:key name="pair-by-name" match="parent/pair" use="name" />
<xsl:template match="/">
    <parent>
        <xsl:for-each select="parent/pair[count(. | key('pair-by-name', name)[1]) = 1]">
             <xsl:sort select="name" />
            <pair>
            <name>
            <xsl:value-of select="name"/>
            </name>
            <value>
            <xsl:value-of select="sum(key('pair-by-name', name)/value)"/>
            </value>
            </pair>
        </xsl:for-each>
    </parent>
</xsl:template>

上記のコードは機能するはずです。

于 2015-01-21T13:52:12.300 に答える