0

XML/XSLT の単純な問題で立ち往生しています

問題に適切な名前を付けることができないため、解決策が見つからないようです。

XML:

<root>
   <entry gid ="001">
      <level_1>
         <target_value>50</target_value>
      </level_1>
   </entry>

   <entry gid ="001">
      <level_1>
         <target_value>30</target_value>
      </level_1>
   </entry>

   <entry gid ="002">
      <level_1>
         <target_value>40</target_value>
      </level_1>
   </entry>

   <entry gid ="002">
      <level_1>
         <target_value>20</target_value>
      </level_1>
   </entry>
</root>

XSL:

<xsl:for-each select="entry[@gid='001']">
   <xsl:if test="level_1/target_value != ''">
      <xsl:value-of select="sum(level_1/target_value)" />
   </xsl:if>
</xsl:for-each>

結果: 5030

どんな助けでも大歓迎です!

4

1 に答える 1

1

ご覧のとおり、変換は要素のみを合計し、level_1/target_value要素ごとに出力しentry[@gid='001']ます。

の を持つすべての <entry>要素の合計が必要なため、送信先のノードセットにそれを記述する必要がありgidます。001sum()

XSLTは次のようになります

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:output method="text" />

  <xsl:template match="/root">
    <xsl:value-of select="sum(entry[@gid='001']/level_1/target_value)" />
  </xsl:template>

</xsl:stylesheet>

出力

80
于 2012-05-22T09:29:33.680 に答える