Группировка XSLT продолжена - проблема xPath? - PullRequest
0 голосов
/ 18 августа 2010

Димитр был большой помощью раньше ... это как вторая часть.:)

Я ломал свой мозг и до сих пор не вижу его.

Теперь, когда я могу выделить бренды из примера xml ниже, теперь я хотел бычтобы выделить все Типы Продуктов данного Бренда $ почти так же, как я смог выделить все Бренды.

xml пример (один из множества Продуктов) ...

<Product>
        <Brand>Brand</Brand>
        <Type>Product Type (Category)</Type>
        ...
    </Product>

Это xsl, который я смог придумать.Я думаю, что моя ошибка в выражении xPath для xsl: key ...

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="Brand" select="Brand"/> 
  <xsl:output method="html" encoding="utf-8"/>
    <xsl:key name="kProdByType" 
          match="Products/Product/Brand[. = $Brand]" use="../Type"/>

  <xsl:template match="Products">
    <xsl:for-each 
          select="Product[generate-id() = 
          generate-id(key('kProdByType', Type)[1])]
         "><xsl:sort select="Type" /><xsl:value-of 
            select="Type" />|</xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

Еще раз спасибо!

1 Ответ

1 голос
/ 18 августа 2010

Теперь вы группируете по Brand и Type.Ключ должен быть:

<xsl:key name="kProdByBrandAndType" 
         match="Product" use="concat(Brand,'+++',Type)"/> 

А теперь группировка:

<xsl:for-each  
          select="Product[generate-id() =  
                          generate-id(key('kProdByBrandAndType',
                                          concat($Brand,'+++',Type))[1])]">

Использовать переменную / параметр в шаблонах должно быть ошибкой, но я думаю, что по крайней мере MSXSLне жалуется на то, что в ключах. В целях безопасности не используйте :

<xsl:key name="kProdByType" match="Product[Brand=$Brand]" use="Type"/> 
...