我有这两个 xml,并且我希望通过从给定的两个输入中对它们求和来获得最终 xml 中的属性总和。在下面的示例中解释
<?xml version="1.0" encoding="UTF-8"?>
<chart xmlns="http://www.xyz.in/server/model" labelStep="1" showValues="0">
<categories>
<category Label="Bangalore Technical RATH" />
</categories>
<dataset>
<set value="3" anchorRadius="2" anchorBorderThickness="3" />
<set value="3" anchorRadius="2" anchorBorderThickness="3" />
</dataset>
</chart>
类似的是第二个 input2.xml
<?xml version="1.0" encoding="UTF-8"?>
<chart xmlns="http://www.xyz.in/server/model" labelStep="1" showValues="0">
<categories>
<category Label="Bangalore Technical RATH" />
</categories>
<dataset>
<set value="2" anchorRadius="2" anchorBorderThickness="3" />
<set value="1" anchorRadius="2" anchorBorderThickness="3" />
</dataset>
</chart>
我用于 xsl-ttransformation 的代码是
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="second" select="document('file2.xml')//*[local-name()='set']" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="*[local-name()='set']/@*[local-name()='value']">
<xsl:for-each select="//*[local-name()='set']">
<xsl:variable name="secondvalue" select="$second/@value" />
<xsl:attribute name="value">
<xsl:value-of select="@*[local-name()='value'] + $secondvalue[1]" />
</xsl:attribute>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
所以在最终的 output.xml 中我只需要显示感兴趣的部分
<dataset>
<set value="5" anchorRadius="2" anchorBorderThickness="3"/>
<set value="4" anchorRadius="2" anchorBorderThickness="3"/>
</dataset>