0

入力xmlがあります

<students>
  <student>
  <name>John</name>
  <marks>100</marks>
</student>
<student>
  <name>Arvind</name>
  <marks>90</marks>
</student>
<student>
  <name>John</name>
  <marks>100</marks>
</student>
<student>
  <name>Arvind</name>
  <marks>80</marks>
</student>
</students>

上記のxmlを次のように変換したい

<students>
   <student>
     <name>John</name>
    <totalMarks>200</marks>
   </student>
   <student>
     <name>Arvind</name>
    <totalMarks>170</marks>
  </student>
 </students>

したがって、基本的には、学生の名前に基づいて入力 xml をグループ化し、それらのマークの合計も取得したいと考えています。

4

2 に答える 2

1

xlst 2.0 では、以下を使用できますfor-each-group

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

    <xsl:template match="/">
        <students>
            <xsl:apply-templates select="students" />
        </students>
    </xsl:template>

    <xsl:template match="students">
        <xsl:for-each-group select="student" group-by="name">
            <student>
                <name>
                    <xsl:value-of select="current-grouping-key()" />
                </name>
                <totalMarks>
                    <xsl:value-of select="sum(current-group()/marks)" />
                </totalMarks>
            </student>
        </xsl:for-each-group>
    </xsl:template>

</xsl:stylesheet>
于 2013-07-15T14:49:05.243 に答える