2

2つのxmlファイルがあります。それらをマージして、いくつかの属性を使用して計算を行いたいと思います。いくつかのアイデアを提供してください。標準のxslthttp ://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> 
4

2 に答える 2

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>
于 2012-09-10T12:20:37.063 に答える
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ドキュメント(未使用)に適用され、提供された2つの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" />
于 2012-09-10T12:26:58.633 に答える