2017-11-28 1 views
0

해당 범주별로 항목을 그룹화하는 xsl 템플릿이 있습니다. 이제는 그 범주 내에서 함께 그룹화하려고합니다. Xsl 1.0, 이중 그룹화

내 XSL 스크립트 :

<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 

    <xsl:variable name="prefix_param">udt_<xsl:value-of select="//udt:Context/udt:ModuleId" />_param</xsl:variable> 
    <xsl:key name="data-by-Category" match="udt:Data" use="udt:Category" /> 

    <xsl:template match="udt:Data" mode="list"> 
    <li> 
     <xsl:value-of select="udt:Subcategory" disable-output-escaping="yes" /> 
     <xsl:value-of select="udt:Information" disable-output-escaping="yes" /> 
    </li> 
    </xsl:template> 

    <xsl:template match="/udt:UserDefinedTable"> 
    <xsl:for-each select="udt:Data[count(. | key('data-by-Category', udt:Category)[1]) = 1]"> 
     <xsl:sort select="udt:Zap" /> 
     <span> 
     <h1> 
      <xsl:value-of select="udt:Category" disable-output-escaping="yes" />&#160;</h1> 
     </span> 
     <xsl:variable name="currentData" select="key('data-by-Category', udt:Category)" /> 
     <xsl:if test="$currentData"> 
     <ul> 
      <xsl:apply-templates select="$currentData" mode="list"> 
      <xsl:sort select="udt:PodCategory" order="ascending" /> 
      </xsl:apply-templates> 
     </ul> 
     </xsl:if> 
    </xsl:for-each> 
    </xsl:template> 

    <xsl:template name="EditLink"> 
    <xsl:if test="udt:EditLink"> 
     <a href="{udt:EditLink}"> 
     <img border="0" alt="edit" src="{//udt:Context/udt:ApplicationPath}/images/edit.gif" /> 
     </a> 
    </xsl:if> 
    </xsl:template> 

샘플 출력 내가 지금 얻을 :

<h1>Category 1</h1> 
<ul> 
<li>Subcategory 1 info 1</li> 
<li>Subcategory 2 info 1</li> 
<li>Subcategory 2 info 2</li> 
<li>Subcategory 2 info 3</li> 
</ul> 

<h1>Category 2</h1> 
<ul> 
<li>Subcategory 1 info 1</li> 
<li>Subcategory 1 info 2</li> 
<li>Subcategory 2 info 1</li> 
</ul> 

을 그리고 이것은 내가 달성하고자하는 샘플 출력 :

<h1>Category 1</h1> 
<h2>Subcategory 1</h2> 
<ul> 
<li>info 1</li> 
</ul> 
<h2>Subcategory 2</h2> 
<ul> 
<li>info 1</li> 
<li>info 2</li> 
<li>info 3</li> 
</ul> 

<h1>Category 2</h1> 
<h2>Subcategory 1</h2> 
<ul> 
<li>info 1</li> 
<li>info 2</li> 
</ul> 
<h2>Subcategory 1</h2> 
<ul> 
<li>info 1</li> 
</ul> 

내가 원하는 보조 그룹에 속한 각 그룹 안에있는 항목을보고 제목을 표시하십시오.

+0

문제를 더 잘 이해하려면 입력 XML을 공유하십시오. –

답변

0

<xsl:key name="data-by-Category-and-Subcategory" match="udt:Data" use="concat(udt:Category, '|', udt:Subcategory)" /> 

다음 예를 제 2 키 g 용 하위 그룹을 식별하는 것

<xsl:template match="/udt:UserDefinedTable"> 
    <xsl:for-each select="udt:Data[count(. | key('data-by-Category', udt:Category)[1]) = 1]"> 
     <xsl:sort select="udt:Zap" /> 
     <span> 
     <h1> 
      <xsl:value-of select="udt:Category" disable-output-escaping="yes" />&#160;</h1> 
     </span> 
     <xsl:variable name="currentData" select="key('data-by-Category', udt:Category)" /> 
     <xsl:for-each select="$currentData[generate-id() = generate-id(key('data-by-Category-and-Subcategory', concat(udt:Category, '|', udt:Subcategory))[1])]"> 
     <h2><xsl:value-of select="udt:Subcategory"/></h2> 
     <xsl::variable name="$sub-group" select="key('data-by-Category-and-Subcategory', concat(udt:Category, '|', udt:Subcategory)"/> 

     <ul> 
      <xsl:apply-templates select="$sub-group" mode="list"> 
      <xsl:sort select="udt:PodCategory" order="ascending" /> 
      </xsl:apply-templates> 
     </ul> 
     </xsl:if> 
    </xsl:for-each> 
    </xsl:template>