1

我有两个相同结构的 xml,我只想要最终 xml 中的属性总和。就像下面 input1.xml 和 input2.xml 属性数据集的值为 20 和 input2 的值为 30 所以 output.xml 应该有 value=50

输入1.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>

输入2.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>
4

1 回答 1

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>
于 2013-11-05T19:51:34.460 回答