我想在COMS级别为每个CDS / CD节点添加此输入XML中的值。问题是,我希望仅对具有ID' A'或者' B'。标签下的价值' C'不应该计算总和。
<?xml version="1.0"?>
<root>
<CDS>
<CD>
<COMS>
<COMP>
<ID>A</ID>
<VAL>1.220</VAL>
</COMP>
<COMP>
<ID>B</ID>
<VAL>2.220</VAL>
</COMP>
<COMP>
<ID>C</ID>
<VAL>5.220</VAL>
</COMP>
</COMS>
</CD>
</CDS>
<CDS>
<CD>
<COMS>
<COMP>
<ID>A</ID>
<VAL>5.2</VAL>
</COMP>
<COMP>
<ID>B</ID>
<VAL>6.5</VAL>
</COMP>
<COMP>
<ID>C</ID>
<VAL>10.5</VAL>
</COMP>
</COMS>
</CD>
</CDS>
<CDS>
<CD>
<COMS>
<COMP>
<ID>A</ID>
<VAL>4.2</VAL>
</COMP>
<COMP>
<ID>B</ID>
<VAL>5.8</VAL>
</COMP>
<COMP>
<ID>C</ID>
<VAL>14.8</VAL>
</COMP>
</COMS>
</CD>
</CDS>
输出XML:
<CDS>
<CD>
<COMS>
<COMP>
<SUM_VALUE>3.44</SUM_VALUE>
</COMP>
</COMS>
</CD>
<CD>
<COMS>
<COMP>
<SUM_VALUE>11.7</SUM_VALUE>
</COMP>
</COMS>
</CD>
<CD>
<COMS>
<COMP>
<SUM_VALUE>10</SUM_VALUE>
</COMP>
</COMS>
</CD>
</CDS>
我的XSLT代码只尝试对所有值求和并给出最终输出。如果有人可以解释如何在for:each循环中对各个comp级别的xml值求和,将会很有帮助。
我最初尝试使用这行代码,但它将所有值加起来
答案 0 :(得分:1)
您可以在sum函数中指定节点过滤(我假设您当前正在使用它)。例如:
<xsl:value-of select="sum(COMP[ID = 'A' or ID = 'B']/VAL)"/>