Xml XSLT跨多个元素添加值

Xml XSLT跨多个元素添加值,xml,xslt,Xml,Xslt,我在XML/XSLT中遇到了一个简单的问题 我真的不能给这个问题起一个恰当的名字,因此似乎找不到任何解决办法 XML: 50 30 40 20 XSL: 结果: 5030 任何帮助都将非常感激 如您所见,您的转换对唯一的level_1/target_值元素进行合计,并输出每个条目[@gid='001']元素的值 由于您需要所有元素的总计,且gid为001,因此必须将其写入提交给sum()的节点集中 XSLT如下所示 <?xml version="1.0" encoding="UTF

我在XML/XSLT中遇到了一个简单的问题

我真的不能给这个问题起一个恰当的名字,因此似乎找不到任何解决办法

XML:


50
30
40
20
XSL:


结果: 5030


任何帮助都将非常感激

如您所见,您的转换对唯一的
level_1/target_值
元素进行合计,并输出每个
条目[@gid='001']
元素的值

由于您需要所有
元素的总计,且
gid
001
,因此必须将其写入提交给
sum()
的节点集中

XSLT如下所示

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:output method="text" />

  <xsl:template match="/root">
    <xsl:value-of select="sum(entry[@gid='001']/level_1/target_value)" />
  </xsl:template>

</xsl:stylesheet>

如果你能说出你想要什么样的输出,以及如何从你的XML中派生出来,这将非常有帮助。我假设您想对所有
/root/entry[@gid='001']/level\u 1/target\u value
元素求和,得到
80
?是的,这正是我想要的
<xsl:for-each select="entry[@gid='001']">
   <xsl:if test="level_1/target_value != ''">
      <xsl:value-of select="sum(level_1/target_value)" />
   </xsl:if>
</xsl:for-each>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:output method="text" />

  <xsl:template match="/root">
    <xsl:value-of select="sum(entry[@gid='001']/level_1/target_value)" />
  </xsl:template>

</xsl:stylesheet>
80