【问题标题】:Merging two xml nodes with same path and printing their sum合并两个具有相同路径的xml节点并打印它们的总和
【发布时间】:2016-04-07 08:45:01
【问题描述】:

我需要有关 xmls 逻辑之一的帮助。我有四个节点,如下所示:

<Root>
<Element>
<ElementId>Fruits</ElementId>
<ElementDes>Apple</ElementDes>
<ElementValue>100</ElementValue>
</Element>
<Element>
<ElementId>Fruits</ElementId>
<ElementDes>Mango</ElementDes>
<ElementValue>200</ElementValue>
</Element>
<ElementId>Vegetables</ElementId>
<ElementDes>Potato</ElementDes>
<ElementValue>300</ElementValue>
</Element>
<Element>
<ElementId>Vegetables</ElementId>
<ElementDes>Brinjal</ElementDes>
<ElementValue>400</ElementValue>
</Element>
</Root>

我需要如下输出:(同类型元素ID的总和):

<Root>
<Element>
<ElementId>Fruits</ElementId>
<ElementDes>AppleMango</ElementDes>
<ElementValue>300</ElementValue>
</Element>
<ElementId>Vegetables</ElementId>
<ElementDes>PotatoBrinjal</ElementDes>
<ElementValue>700</ElementValue>
</Element>
</Root>

谁能帮我解决这个问题?

【问题讨论】:

标签: java xml xslt


【解决方案1】:

假设您的输入数据是有效的 XML(您的示例不是),这将产生预期的结果:

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

   <xsl:template match="Root">
      <xsl:copy>
         <xsl:for-each-group select="Element" group-by="ElementId">
            <Element>
               <xsl:apply-templates select="@* | ElementId"/>
               <ElementDes><xsl:value-of select="current-group()/ElementDes" separator=""/></ElementDes>
               <ElementValue><xsl:value-of select="sum(current-group()/ElementValue)"/></ElementValue>
            </Element>
         </xsl:for-each-group>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="@* | node()">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

【讨论】:

  • 感谢您的回复将尝试! :)
猜你喜欢
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多