我遇到了XSLT问题。当发票编号不是以字母“M'”开头时,我想总结所有小计值。我遇到的问题是我使用SUM函数,但我不知道如何给它条件。
我过去曾使用过IF结构,但它们被用来生成一个类似于" 456 + 415"我需要一个总和数字。
以下是我要翻译的XML:
<PriceSheets>
<PriceSheet>
<SubTotal>456</SubTotal>
<Settlement>
<InvoiceNumber>M1234567890</InvoiceNumber>
</Settlement>
</PriceSheet>
<SubTotal>415</SubTotal>
<Settlement>
<InvoiceNumber>1234567891</InvoiceNumber>
</Settlement>
<PriceSheet>
</PriceSheet>
</PriceSheets>
在这种情况下,我希望看到&#34; 415&#34;。任何帮助将不胜感激!
由于
PS:我以前用过
<xsl:value-of select="sum(PriceSheets/PriceSheet/SubTotal/text())" />
对所有值求和,但问题是我需要在求和之前查看Settlement / InvoiceNumber节点。
答案 0 :(得分:0)
您的XML看起来无效,但假设每个PriceSheet都有一个Settlment元素和一个SubTotal元素,那么您需要这样:
<xsl:value-of
select="sum(PriceSheets/PriceSheet[substring(Settlement/InvoiceNumber, 1, 1)<>'M']/SubTotal/text())" />
答案 1 :(得分:0)
您想要选择所有小计,其中兄弟结算节点的发票人数并非以&#39; M&#39;
开始:<xsl:value-of select="sum(//SubTotal[substring(../Settlement/InvoiceNumber, 1, 1) != 'M'])" />
答案 2 :(得分:0)
谢谢大家的投入!我用你的例子来获取工作代码!
sum(PriceSheets/PriceSheet[substring(Settlement/InvoiceNumber/text(), 1, 1) != 'M']/SubTotal/text())
我还试验了其他有用的东西:
<xsl:value-of select="sum(PriceSheets/PriceSheet[not(starts-with(Settlement/InvoiceNumber, 'M'))]/SubTotal/text())" />
这两个对我有用!谢谢大家:)