Groupby отличается, как я могу это сделать? - PullRequest
0 голосов
/ 05 января 2011
<?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, которое перегруппирует продукт примерно так:

{product 1:
11/11/2011 - 200
16/11/ 2011 - 290}
{product 6
11/11/2011 - 100}

Я работаю с xslt 1.0 Asp .net C # XslCompiledTransformation

Ответы [ 2 ]

1 голос
/ 05 января 2011

Это 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, ' : &#xa;')"/>
    <xsl:apply-templates select="key( 'groupById', productId )" mode="inner-content"/>
    <xsl:text> }&#xa;</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>&#xa;</xsl:text>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

Применительно к вашему примеру кода он даст такой результат:

{ product 1 : 
11/11/2011 - 200
16/11/2011 - 290 }
{ product 6 : 
11/11/2011 - 100 }
1 голос
/ 05 января 2011

Используйте мюнхенскую группировку, как описано здесь: http://www.jenitennison.com/xslt/grouping/index.xml. Если вам нужна помощь в написании кода, укажите, хотите ли вы вывод простого текста или вывод HTML в опубликованном вами формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...