2010-02-04 3 views
3

나는 다음과 같은 코드를 가지고는 :XSLT 그룹화 및 서브 그룹

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" /> 

    <xsl:key name="categories" match="Category" use="." /> 
    <xsl:key name="clients" match="Category" use ="Category/Client" /> 

    <xsl:template match="/"> 
    <ul id="red" class="treeview-red"> 
     <xsl:for-each select="/Promotions/Promotion/Category[ 
     generate-id(.) = generate-id(key('categories', .)[1]) 
     ]"> 
     <xsl:variable name="cname" select="." /> 

     <li> 
      <span> 
      <xsl:value-of select="$cname" /> 
      </span> 

      <xsl:for-each select="/Promotions/Promotion[Category=$cname]"> 
      <ul> 
       <li> 
       <span> 
        <xsl:value-of select="Client" /> 
       </span> 
       </li> 
       <ul> 
       <li> 
        <span> 
        <xsl:value-of select="Title" /> 
        </span> 
       </li> 
       </ul> 
      </ul> 
      </xsl:for-each> 
     </li> 
     </xsl:for-each> 

    </ul> 
    </xsl:template> 
</xsl:stylesheet> 

내 XML : 나는 출력을 원하는

<ul id="red" class="treeview-red"> 
    <li><span>Arts &amp; Entertainment</span><ul> 
     <li><span>Client 1</span></li> 
     <ul> 
     <li><span>Get your Free 2</span></li> 
     </ul> 
    </ul> 
    <ul> 
     <li><span>Client 1</span></li> 
     <ul> 
     <li><span>Get your Free 4</span></li> 
     </ul> 
    </ul> 
    <ul> 
     <li><span>Client 1</span></li> 
     <ul> 
     <li><span>Get your Free 5</span></li> 
     </ul> 
    </ul> 
    </li> 
    <li><span>Community &amp; Neighborhood</span><ul> 
     <li><span>Client 2</span></li> 
     <ul> 
     <li><span>Get your Free 1</span></li> 
     </ul> 
    </ul> 
    </li> 
    <li><span>Education</span><ul> 
     <li><span>Client 3</span></li> 
     <ul> 
     <li><span>Get Your Free 3</span></li> 
     </ul> 
    </ul> 
    </li> 
</ul> 

을 그룹화 할 수 :

<Promotions> 
    <Promotion> 
    <Category>Arts &amp; Entertainment</Category> 
    <Client>Client 1</Client> 
    <Title>Get your Free 2</Title> 
    </Promotion> 
    <Promotion> 
    <Category>Arts &amp; Entertainment</Category> 
    <Client>Client 1</Client> 
    <Title>Get your Free 4</Title> 
    </Promotion> 
    <Promotion> 
    <Category>Arts &amp; Entertainment</Category> 
    <Client>Client 1</Client> 
    <Title>Get your Free 5</Title> 
    </Promotion> 
    <Promotion> 
    <Category>Community &amp; Neighborhood</Category> 
    <Client>Client 2</Client> 
    <Title>Get your Free 1</Title> 
    </Promotion> 
    <Promotion> 
    <Category>Education</Category> 
    <Client>Client 3</Client> 
    <Title>Get Your Free 3</Title> 
    </Promotion> 
</Promotions> 

그것은 다음과 같은 출력 먼저 카테고리별로 클라이언트별로 각 카테고리에 대한 통찰력을 얻을 수 있습니다.

<ul id="red" class="treeview-red"> 
    <li><span>Arts &amp; Entertainment</span><ul> 
     <li><span>Client 1</span></li> 
     <ul> 
     <li><span>Get your Free 2</span></li> 
     </ul> 
     <ul> 
     <li><span>Get your Free 4</span></li> 
     </ul> 
     <ul> 
     <li><span>Get your Free 5</span></li> 
     </ul> 
    </ul> 
    </li> 
    <li><span>Community &amp; Neighborhood</span><ul> 
     <li><span>Client 2</span></li> 
     <ul> 
     <li><span>Get your Free 1</span></li> 
     </ul> 
    </ul> 
    </li> 
    <li><span>Education</span><ul> 
     <li><span>client 3</span></li> 
     <ul> 
     <li><span>Get Your Free 3</span></li> 
     </ul> 
    </ul> 
    </li> 
</ul> 

기본적으로 카테고리별로 그룹화 한 후 해당 카테고리의 클라이언트에 대한 각 프로모션과 함께 카테고리 아래에 하나의 클라이언트 만보고 싶습니다.

+1

소스 XML뿐만 아니라, 당신이 원하고있는 결과의 XML 구조를보고 정말 도움이 될 것입니다 점점. –

+0

지금 XML로 편집 중입니다. –

답변

9

XML 입력을 보지 않고 스타일 시트에 대한 변경을 제안하기가 어렵 기 때문에 현재는 XSLT 1.0을 사용한 다중 레벨 그룹화의 예로 http://www.biglist.com/lists/xsl-list/archives/200101/msg00070.html을 살펴 보겠습니다.

[편집] : 다음은이 개 수준 Muenchian 그룹을 적용 할 수있는 방법은 다음과 같습니다

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:output method="html" indent="yes"/> 

    <xsl:key name="k1" match="Promotion" use="Category"/> 
    <xsl:key name="k2" match="Promotion" use="concat(Category, '|', Client)"/> 

    <xsl:template match="Promotions"> 
    <ul id="red" class="treeview-red"> 
     <xsl:for-each select="Promotion[generate-id() = generate-id(key('k1', Category)[1])]"> 
     <li> 
      <span> 
      <xsl:value-of select="Category"/> 
      </span> 
      <xsl:for-each select="key('k1', Category)[generate-id() = generate-id(key('k2', concat(Category, '|', Client))[1])]"> 
      <ul> 
       <li> 
       <span> 
        <xsl:value-of select="Client"/> 
       </span> 
       <xsl:for-each select="key('k2', concat(Category, '|', Client))"> 
        <ul> 
        <li> 
         <span> 
         <xsl:value-of select="Title"/> 
         </span> 
        </li> 
        </ul> 
       </xsl:for-each> 
       </li> 
      </ul> 
      </xsl:for-each> 
     </li> 
     </xsl:for-each> 
    </ul> 
    </xsl:template> 

</xsl:stylesheet> 
+0

이것이 정확히 내가 찾던 답변입니다. 코드 및 XML 곧 게시됩니다. –

+0

당신이 올바른 방향으로 나를 가리켰지만, 제 질문을 편집했습니다. 제대로 작동하지 않습니다. 제발 조언 해주세요. –