0

私はxsltに非常に慣れていません。問題を解決する方法を探していますが、探しているものが見つからないようです。

変換する必要があるのは、次のとおりです。amount1、amount2、amount3、amount4の合計を合計すると、この合計は、処理できるOriginalAmount以下である必要があり(true)、そうでない場合は拒否する必要があるOriginalAmountよりも大きくなります(false)。この問題を解決するには?

XML は次のとおりです。

  <OriginalAmount>1.2100</OriginalAmount>

  <Amount1>1.0000</Amount1>
  <Amount2>0.0000</Amount2>
  <Amount3>1.0000</Amount3>
  <Amount4>0.0000</Amount4>

xslt または C# でコードを記述した方が簡単だと思いますが、最良の提案は何ですか?

4

1 に答える 1

1

以下を使用して金額を合計できます。

<xsl:variable name="amountSum" select="sum(root/*[substring(name(), 1, 6) = 'Amount'])"/>

root/*[substring(name(), 1, 6) = 'Amount']名前が「Amount」で始まるすべての要素を選択するセレクターです。つまり、次を選択します: Amount1Amount2、 ...

次の場合は、はるかに簡単です。

  • 要素が同じ名前 (例: Amount) の場合、合計は次のようになります。<xsl:variable name="amountSum" select="sum(Amount)"/>
  • 一部の親のすべての要素を合計できます。合計は次のようになります: <xsl:variable name="amountSum" select="sum(parentElement/*)"/>(これは のすべての要素を合計しますparentElement)

次に、値を比較できます。

<xsl:if test="OriginalAmount > $amountSum">.. sum is smaller ..</xsl:if>(比較するより&gt;代わりに使うほうがいいです)>

実際の例を参照してください:

ソース XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <OriginalAmount>2.2100</OriginalAmount>

  <Amount1>1.0000</Amount1>
  <Amount2>0.0000</Amount2>
  <Amount3>1.0000</Amount3>
  <Amount4>0.0000</Amount4>
</root>

XSLT:

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

    <xsl:template match="/">
        <xsl:variable name="amountSum" select="sum(root/*[substring(name(), 1, 6) = 'Amount'])"/>
        <xsl:value-of select="$amountSum"/>
        <xsl:choose>
            <xsl:when test="root/OriginalAmount &gt; $amountSum">greater</xsl:when>
            <xsl:otherwise>less</xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>
于 2013-05-09T10:17:59.470 に答える