This transformation (64 lines):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kColByPosAndVal" match="column"
use="concat(count(preceding-sibling::*),
+ ,
sum)"/>
<xsl:key name="kIdByVal" match="column/@id"
use="."/>
<xsl:template match="/*">
<xsl:variable name="vsum1" select=
"sum(stats[@set=1]/*/column
[not(key( kColByPosAndVal ,
concat(count(preceding-sibling::*),
+ ,
sum)
)[2]
)])"/>
<xsl:variable name="vsum2" select=
"sum(stats[@set=2]/*/column
[not(key( kColByPosAndVal ,
concat(count(preceding-sibling::*),
+ ,
sum)
)[2]
)])"/>
Set 1 Set 2 Diff(Set 1 - Set 2)
Total (Diff) <xsl:text/>
<xsl:value-of select="$vsum1"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$vsum2"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$vsum1 -$vsum2"/>
<xsl:text>
</xsl:text>
<xsl:for-each select=
"*/*/column/@id
[generate-id()
= generate-id(key( kIdByVal ,.)[1])
]
[not(key( kColByPosAndVal ,
concat(count(../preceding-sibling::*),
+ ,
../sum)
)[2]
)]">
<xsl:variable name="vcolSet1" select=
"/*/stats[@set=1]/*/column[@id=current()]/sum"/>
<xsl:variable name="vcolSet2" select=
"/*/stats[@set=2]/*/column[@id=current()]/sum"/>
Column <xsl:value-of select=".+1"/><xsl:text/>
<xsl:text> </xsl:text>
<xsl:value-of select="$vcolSet1"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$vcolSet2"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$vcolSet1 -$vcolSet2"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在应用XML文件时:
<export>
<stats set="1">
<columns>
<column id="0">
<sum>100</sum>
</column>
<column id="1">
<sum>102</sum>
</column>
<column id="2">
<sum>12</sum>
</column>
</columns>
</stats>
<stats set="2">
<columns>
<column id="0">
<sum>100</sum>
</column>
<column id="1">
<sum>101</sum>
</column>
<column id="2">
<sum>19</sum>
</column>
</columns>
</stats>
</export>
produces the wanted, correct result:
Set 1 Set 2 Diff(Set 1 - Set 2)
Total (Diff) 114 120 -6
Column 2 102 101 1
Column 3 12 19 -7
<>Explanation:
www.un.org/Depts/DGACM/index_spanish.htm 关键名称为kColByPosAndVal
,用于选择具有特定职位(所有<代码>>>columnsiblings)和其sum
儿童要素的特定价值的所有栏目。
www.un.org/Depts/DGACM/index_spanish.htm 在Muenchian集团中使用了“kIdByVal
的关键名称,以找到id
上的所有不同数值。
www.un.org/Depts/DGACM/index_spanish.htm 这两栏的计算方法仅包括<代码>k的栏目。 ColByPosAndVal 关键选择只有一个<代码>column要素 (如果它选择两个<代码>column要素,这两个要素都处于相同地位,并具有相同的<代码>sum/code>。)
www.un.org/Depts/DGACM/index_spanish.htm 其余部分应易于理解。