我对xslt很新。我一直在寻找如何解决我的问题,但似乎我找不到我想要的东西。
我需要改变的是: 总计金额1,金额2,金额3,金额4 那么这个总数必须小于或等于可以处理的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#中编写代码会更容易,您最好的建议是什么?
答案 0 :(得分:1)
您可以使用以下方式汇总金额:
<xsl:variable name="amountSum" select="sum(root/*[substring(name(), 1, 6) = 'Amount'])"/>
root/*[substring(name(), 1, 6) = '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>
(最好在比较时使用>
代替>
请参阅live example:
源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 > $amountSum">greater</xsl:when>
<xsl:otherwise>less</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>