我有一个 xml,其中有多个存储桶,这些存储桶被汇总到一个 Total 中
我正在使用xslt 2.0.....
<RPTTIME>
<ATTRTYPE>sickPaid</ATTRTYPE>
<VALUE>9</VALUE>
</RPTTIME>
<RPTTIME>
<ATTRTYPE>annLeave</ATTRTYPE>
<VALUE>9</VALUE>
</RPTTIME>
<RPTTIME>
<ATTRTYPE>sickPaid</ATTRTYPE>
<VALUE>9</VALUE>
</RPTTIME>
<RPTTIME>
<ATTRTYPE>regHour</ATTRTYPE>
<VALUE>8</VALUE>
</RPTTIME>
当前代码
<xsl:value-of select="sum(./RPTTIME/VALUE)"/>
结果:已报告 35 个
我被要求根据类型排除一些值(annLeave、sickPaid 等)。 示例数据中所需的输出为 8。
此代码有效
<xsl:value-of select="sum(./RPTTIME[not(ATTRTYPE=('noMap','otherLeave','leaveWOPay','annLeave','sickPaid','sickNotPaid'))]/VALUE)"/>
我更喜欢使用变量。 这是我正在尝试的,但它被忽略了
<xsl:variable name='excludeList'>
<ATTRTYPE>otherLeave</ATTRTYPE>
<ATTRTYPE>leaveWOPay</ATTRTYPE>
<ATTRTYPE>annLeave</ATTRTYPE>
<ATTRTYPE>sickPaid</ATTRTYPE>
<ATTRTYPE>sickNotPaid</ATTRTYPE>
</xsl:variable>
<xsl:value-of select="sum(./RPTTIME[ATTRTYPE != $excludeList]/VALUE)"/>
结果:35
我也尝试过
<xsl:value-of select="sum(./RPTTIME[not(ATTRTYPE = $excludeList)]/VALUE)"/>
结果:35
给定格式良好的 XML 输入:
<ROOT>
<RPTTIME>
<ATTRTYPE>sickPaid</ATTRTYPE>
<VALUE>9</VALUE>
</RPTTIME>
<RPTTIME>
<ATTRTYPE>annLeave</ATTRTYPE>
<VALUE>9</VALUE>
</RPTTIME>
<RPTTIME>
<ATTRTYPE>sickPaid</ATTRTYPE>
<VALUE>9</VALUE>
</RPTTIME>
<RPTTIME>
<ATTRTYPE>regHour</ATTRTYPE>
<VALUE>8</VALUE>
</RPTTIME>
</ROOT>
你可以这样做:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name='excludeList'>
<ATTRTYPE>otherLeave</ATTRTYPE>
<ATTRTYPE>leaveWOPay</ATTRTYPE>
<ATTRTYPE>annLeave</ATTRTYPE>
<ATTRTYPE>sickPaid</ATTRTYPE>
<ATTRTYPE>sickNotPaid</ATTRTYPE>
</xsl:variable>
<xsl:template match="/ROOT">
<result>
<xsl:value-of select="sum(RPTTIME[not(ATTRTYPE = $excludeList/ATTRTYPE)]/VALUE)"/>
</result>
</xsl:template>
</xsl:stylesheet>
得到这个结果:
<?xml version="1.0" encoding="UTF-8"?>
<result>8</result>
注意语法:谓词
[not(value = $sequence)]
与您尝试的 [value != $sequence]
非常不同。请参阅此处的比较规则:https://www.w3.org/TR/2010/REC-xpath20-20101214/#id-comparisons