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”开头的所有元素 - 即它选择:Amount1, Amount2, ...

在以下情况下会容易得多:

  • 元素具有相同的名称(例如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 回答