2014-01-15 9 views
1

У меня проблема с вложенной группировкой в ​​XSLT 2.0. Я могу почти достичь желаемых результатов, но не совсем, и я запутался в гнезде, поэтому надеюсь получить здесь какую-то помощь.XSLT Вложенная группировка

Проблема состоит в том, что некоторые элементы имеют несколько классификаций продуктов или предметов, и это работает для группировки предметных элементов, но не для продукта. Я уверен, что это просто ошибка, я просто не могу видеть это прямо сейчас ...

Вот пример файла XML, подлежащих обработке:

<metadata> 
    <file id="1" title="Dimensions"> 
     <subject>Technical Data</subject> 
     <product>A</product> 
    </file> 
    <file id="2" title="Noise and Vibrations"> 
     <subject>Technical Data</subject> 
     <product>B</product> 
    </file> 
    <file id="3" title="Overview"> 
     <subject>Product Description</subject> 
     <product>A</product> 
     <product>B</product> 
    </file> 
    <file id="4" title="Main Components"> 
     <subject>Product Description</subject> 
     <subject>Technical Data</subject> 
     <product>B</product> 
    </file> 
</metadata> 

И вот XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0"> 

     <xsl:output method="xml" indent="yes"/> 
     <xsl:template match="metadata"> 
      <ul> 
       <xsl:for-each-group select="file" group-by="subject"> 
        <li> 
         <xsl:value-of select="subject"/> 
         <ul> 
          <xsl:for-each-group select="current-group()" group-by="product"> 
           <li> 
            <xsl:value-of select="product"/> 
            <ul> 
             <xsl:for-each select="current-group()"> 
              <li> 
               <xsl:value-of select="@title"/> 
              </li> 
             </xsl:for-each> 
            </ul> 
           </li> 
          </xsl:for-each-group> 
         </ul> 
        </li> 
       </xsl:for-each-group> 
      </ul> 
     </xsl:template> 

</xsl:stylesheet> 

Это текущий результат:

<ul> 
    <li>Technical Data 
     <ul> 
     <li>A 
      <ul> 
       <li>Dimensions</li> 
      </ul> 
     </li> 
     <li>B 
      <ul> 
       <li>Noise and Vibrations</li> 
       <li>Main Components</li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
    <li>Product Description<ul> 
     <li>A B 
      <ul> 
       <li>Overview</li> 
      </ul> 
     </li> 
     <li>A B 
      <ul> 
       <li>Overview</li> 
       <li>Main Components</li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
</ul> 

но то, что я хочу это («Обзор» под обоими элементами продукта а и в, но «Main Компоненты»под только B):

<ul> 
    <li>Technical Data 
     <ul> 
     <li>A 
      <ul> 
       <li>Dimensions</li> 
      </ul> 
     </li> 
     <li>B 
      <ul> 
       <li>Noise and Vibrations</li> 
       <li>Main Components</li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
    <li>Product Description<ul> 
     <li>A 
      <ul> 
       <li>Overview</li> 
      </ul> 
     </li> 
     <li>B 
      <ul> 
       <li>Overview</li> 
       <li>Main Components</li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
</ul> 

ответ

3

изменения

<xsl:value-of select="product"/> 

в

<xsl:value-of select="current-grouping-key()"/> 
+0

Совершенная, я знал, что что-то важное отсутствует, работает как шарм, спасибо! – Anders

Смежные вопросы