<?xml version="1.0"?>
<Products>
<product>
<productId >1</productId>
<textdate>11/11/2011</textdate>
<price>200</price>
</product>
<product>
<productId >6</productId>
<textdate>11/11/2011</textdate>
<price>100</price>
</product>
<product>
<productId >1</productId>
<textdate>16/11/2011</textdate>
<price>290</price>
</product>
</Products>
我有这个xml,我想要一个xslt转换,重新组合这样的产品:
{产品1:
11/11/2011 - 200
16/11/2011 - 290}
{产品6
11/11/2011 - 100}
我使用xslt 1.0 Asp .net C#XslCompiledTransformation
答案 0 :(得分:1)
使用Muenchian分组,如下所述:http://www.jenitennison.com/xslt/grouping/index.xml。如果您在编写代码时需要帮助,请说明您是否希望以您发布的格式输出纯文本或HTML输出。
答案 1 :(得分:1)
这个XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:key name="groupById" match="product" use="productId"/>
<xsl:template match="/*">
<xsl:apply-templates select="product[
generate-id() =
generate-id( key( 'groupById', productId ) )
]"/>
</xsl:template>
<xsl:template match="product">
<xsl:text>{ product </xsl:text>
<xsl:value-of select="concat(productId, ' : 
')"/>
<xsl:apply-templates select="key( 'groupById', productId )" mode="inner-content"/>
<xsl:text> }
</xsl:text>
</xsl:template>
<xsl:template match="product" mode="inner-content">
<xsl:value-of select="concat( textdate, ' - ', price )"/>
<xsl:if test="position() != last()">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
应用于您的代码示例,它将产生以下结果:
{ product 1 :
11/11/2011 - 200
16/11/2011 - 290 }
{ product 6 :
11/11/2011 - 100 }