我有这两个xml,我希望在最终xml中通过将它们与给定的两个输入相加来得到attibutes的总和。在下面的示例中解释
<?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>
答案 0 :(得分:1)
这个怎么样:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://www.xyz.in/server/model" 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="my:dataset">
<xsl:copy>
<xsl:for-each select="my:set">
<xsl:variable name="position" select="position()" />
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:attribute name="value">
<xsl:value-of select="number(@value) + number(document('source2.xml')/my:chart/my:dataset/my:set[$position]/@value)" />
</xsl:attribute>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
尝试在缓存中设置总和,稍后在解析结果查询时,可以使用此缓存来放置其他2个xml的值之和。 您也可以设置相同的配置文件属性。