我需要有关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>
有人可以帮我解决这个问题吗?
答案 0 :(得分: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>