0

このようなtranscript.xmlがあり、gpaを計算したい

    <?xml version="1.0" encoding="UTF-8"?>
<transcript>
    <courses>
        <course>
            <code>IK2210</code>        
            <credits>3</credits>
            <grade>A</grade>
        </course>
        <course>
            <code>IB2210</code>
            <credits>3</credits>
            <grade>A</grade>
        </course>
        <course>
            <code>IB2210</code>
            <credits>1</credits>
            <grade>C</grade>
        </course>
        <course>
            <code>ID1234</code>
            <credits>2</credits>
            <grade>B</grade>
        </course>
    </courses>

</transcript>

このようにトランスクリプトをインポートしました

<xsl:variable name="transcript" select="document('transcript2.xml')/transcript"/> 

私はこれをやろうとしました

<xsl:value-of select=" (4*(sum($transcript/courses/course/credits[$transcript/courses/course/grade='A'])) + 3*(sum($transcript/courses/course/credits[$transcript/courses/course/grade='B'])) + 2*(sum($transcript/courses/course/credits[$transcript/courses/course/grade='C'])) + 1*(sum($transcript/courses/course/credits[$transcript/courses/course/grade='D']))) div (sum($transcript/courses/course/credits))"/>

しかし部品

(sum($transcript/courses/course/credits[$transcript/courses/course/grade='A']))

すべてのクレジットを合計する

状態はどのように確認できますか?ありがとう

4

1 に答える 1

2

次を使用する代わりに、式が機能したと思います。

(sum($transcript/courses/course/credits[$transcript/courses/course/grade='A']))

使いました:

(sum($transcript/courses/course[grade='A']/credits))

しかし、おそらくこれはもう少し簡潔です:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:key name="kGrade" match="credits" use="../grade"/>

  <xsl:template match="/">
    <root>
      <xsl:variable name="transcript" select="document('SOTranscript.xml')/transcript" />
      <xsl:apply-templates select="$transcript" mode="getTotal" />
    </root>
  </xsl:template>

  <xsl:template match="transcript" mode="getTotal">
    <xsl:value-of
            select="(4 * sum(key('kGrade', 'A')) + 
                  3 * sum(key('kGrade', 'B')) + 
                  2 * sum(key('kGrade', 'C')) + 
                  sum(key('kGrade', 'D'))
                 ) div sum(courses/course/credits)"/>
  </xsl:template>
</xsl:stylesheet>

サンプル入力で使用すると、結果は次のようになります。

<root>3.5555555555555553</root>

これは期待値だと思います。

于 2013-01-27T12:49:28.257 に答える