2010-08-17 1 views
0

Димитрий был большой помощью раньше ... это вроде как часть вторая. :)XSLT группировка продолжалась - проблема xPath?

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

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

пример 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

Теперь вы группируете 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"/> 
+0

BAMM !!! БЛАГОДАРЯ!!! – 2010-08-17 21:31:53

+0

@Jimmmy: Вы хорошо! – 2010-08-17 21:49:08