使用xslt将相同的结构化xml与total属性合并

时间:2013-11-05 12:32:24

标签: xml xslt

我有两个相同结构的xml,我只想要最终xml中的属性总和。如下面的input1.xml和input2.xml,atribute数据集的值为20,input2的值为30,因此output.xml的值应为= 50

input1.xml

<?xml version="1.0" encoding="UTF-8"?>
<chart xmlns=" "
       labelStep="1"
       showValues="0"
       anchorRadius="1"
      >
   <categories>
      <category Label="Technical RATH"/>
      <category Label="Technical RATH2"/>
   </categories>
   <dataset>
      <set value="20" color="a5cf5a"/>
      <set value="10" color="b5cf5a"/>
   </dataset>
</chart>

input2.xml

<?xml version="1.0" encoding="UTF-8"?>
<chart xmlns=" "
       labelStep="1"
       showValues="0"
       anchorRadius="1"
      >
   <categories>
      <category Label="Technical RATH"/>
      <category Label="Technical RATH2"/>
   </categories>
   <dataset>
      <set value="30" color="a5cf5a"/>
      <set value="150" color="b5cf5a"/>
   </dataset>
</chart>

和output.xml应为

<?xml version="1.0" encoding="UTF-8"?>
<chart xmlns=" "
       labelStep="1"
       showValues="0"
       anchorRadius="1"
      >
   <categories>
      <category Label="Technical RATH"/>
      <category Label="Technical RATH2"/>
   </categories>
   <dataset>
      <set value="50" color="a5cf5a"/>
      <set value="160" color="b5cf5a"/>
   </dataset>
</chart>

1 个答案:

答案 0 :(得分:1)

您需要修复这些文档中命名空间的内容,并根据以下内容进行调整,但除此之外,您可以执行此操作:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="xml" indent="yes"/>

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

<xsl:template match="set/@value">
    <xsl:attribute name="value">
        <xsl:value-of select="number(.) + number(document('source2.xml')/chart/dataset/set/@value)"/>
    </xsl:attribute>
</xsl:template>

</xsl:stylesheet>