我有两个xml文件。我想合并它们并使用一些属性进行一些算术运算。请提供一些想法。我使用标准的xslt http://informatik.hu-berlin.de/merge来合并文件。
文件1:
<coverage branch-rate="0.5125" branch-total="50" line-rate="0.00593031875463">
</coverage>
文件2:
<coverage branch-rate="0.5" branch-total="40" line-rate="1.0">
</coverage>
预期结果文件
<coverage branch-rate="(0.5125*50 + 05*40)/(50+40)" branch-total="50" line-rate="0.00593031875463">
</coverage>
答案 0 :(得分:1)
您可以使用XSLT和文档功能。文档将另一个xml文件加载到xslt处理中。该示例仅执行简单的算术运算。你需要修改它。
<xsl:template match="coverage">
<xsl:variable name="branchRateFromFile1" select="@branch-rate"/>
<xsl:variable name="branchRateFromFile2" select="document(FILE2)/coverage/@branch-rate"/>
<xsl:copy>
<xsl:attribute name="branch-rate"><xsl:value-of select="number($branchRateFromFile1)+number($branchRateFromFile2)"/></xsl:attribute>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>
答案 1 :(得分:1)
此转化:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pFile1" select="'file:///c:/temp/delete/file1.xml'"/>
<xsl:param name="pFile2" select="'file:///c:/temp/delete/file2.xml'"/>
<xsl:variable name="vF2Cover" select="document($pFile2)/coverage"/>
<xsl:template match="/">
<xsl:apply-templates select="document($pFile1)/coverage"/>
</xsl:template>
<xsl:template match="coverage">
<coverage branch-rate=
"{(@branch-rate*@branch-total + $vF2Cover/@branch-rate*$vF2Cover/@branch-total)
div (@branch-total+$vF2Cover/@branch-total)
}"
branch-total=
"{@branch-total*(@branch-total>= $vF2Cover/@branch-total)
+
$vF2Cover/@branch-total*($vF2Cover/@branch-total >@branch-total)
}"
line-rate=
"{@line-rate*($vF2Cover/@line-rate >= @line-rate)
+
$vF2Cover/@line-rate*(@line-rate > $vF2Cover/@line-rate)
}"/>
</xsl:template>
</xsl:stylesheet>
应用于任何XML文档(未使用),并且提供的两个XML文档位于:
C:/temp/delete/file1.xml:
<coverage branch-rate="0.5125" branch-total="50" line-rate="0.00593031875463">
</coverage>
和c:/temp/delete/file2.xml:
<coverage branch-rate="0.5" branch-total="40" line-rate="1.0">
</coverage>
会产生想要的正确结果:
<coverage branch-rate="0.5069444444444444" branch-total="50" line-rate="0.00593031875463" />