2013-08-01 6 views
1

나는 xsl : for-each를 갖고 있으며 div에 2 개의 항목을 모두 포장하고 싶습니다. 그렇게하는 방법? xsl - div로 각 for의 각 2 개 항목을 감싸기

<xsl:for-each select="$datapath/PackageInfoList/PackageInfo"> 

<!-- lots of html in here --> 

</xsl:for-each> 

그래서 결과는 다음과 같습니다

<div> 
<!-- lots of html in here --> 
<!-- lots of html in here --> 
</div> 
<div> 
<!-- lots of html in here --> 
<!-- lots of html in here --> 
</div> 
+0

검사 할 수있다 [이 응답 (http://stackoverflow.com/a/9908661/2633606). – rcgoncalves

답변

6

이 등 핸들 위치 1, 3, 5,에 요소에 대한 실행이

<xsl:for-each select="$datapath/PackageInfoList/PackageInfo[position() mod 2 = 1]"> 
    <div> 
    <!-- lots of html in here --> 

    <!-- do something with following-sibling::PackageInfo[1] --> 
    </div> 
</xsl:for-each> 

처럼 홀수 <PackageInfo> 요소를 선택 각각 수동으로 <PackageInfo>을 따르십시오.


더 관용적

<xsl:template match="/"> 
    <xsl:apply-templates select="$datapath/PackageInfoList/PackageInfo" mode="group2" /> 
</xsl:template> 

<xsl:template match="PackageInfo" mode="group2"> 
    <xsl:if test="position() mod 2 = 1"> 
    <div> 
     <xsl:apply-templates select=". | following-sibling::PackageInfo[1]" /> 
    </div> 
    </xsl:if> 
</xsl:template> 

<xsl:template match="PackageInfo"> 
    <!-- lots of html in here --> 
</xsl:template> 

유연

<xsl:template match="/"> 
    <xsl:apply-templates select="$datapath/PackageInfoList/PackageInfo" mode="group"> 
    <xsl:with-param name="groupcount" select="2" /> 
    </xsl:apply-templates> 
</xsl:template> 

<xsl:template match="PackageInfo" mode="group"> 
    <xsl:param name="groupcount" select="2" /> 

    <xsl:if test="position() mod $groupcount = 1"> 
    <div> 
     <xsl:apply-templates select=". | following-sibling::PackageInfo[position() &lt; $groupcount]" /> 
    </div> 
    </xsl:if> 
</xsl:template> 

<xsl:template match="PackageInfo"> 
    <!-- lots of html in here --> 
</xsl:template> 
+0

대답의 첫 부분은 내가 원하는 바가 아닌 이상한 요소에 대한 답입니다. for-each를 사용하여 '더 관용적 인'답을 어떻게 통합합니까? –

+1

@ MarkSteggles "현재"및 "원하는"출력 샘플을 제공하여 원하는대로 말하지 않았으므로 가장 좋습니다. - 관용적 인 해결책은' '없이 작동합니다. 그냥 버리고''를 사용하십시오. ''의 99 %는 어쨌든 사용하기에는 틀린 것이며, 그것을 entierely하지 않도록하십시오. – Tomalak