使用XSLT代码添加特定XML标记

时间:2014-10-28 09:07:13

标签: xml xslt

我想在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值求和,将会很有帮助。

我最初尝试使用这行代码,但它将所有值加起来

1 个答案:

答案 0 :(得分:1)

您可以在sum函数中指定节点过滤(我假设您当前正在使用它)。例如:

<xsl:value-of select="sum(COMP[ID = 'A' or ID = 'B']/VAL)"/>