문제

항목 XSLT 1.0을 그룹화하는 방법을 알아내는 데 어려움이 있습니다. 아래와 유사한 소스 XML이 있습니다.

<client name="client A">
    <project name = "project A1"/>
    <project name = "project A2"/>
    <project name = "project A3"/>
    <project name = "project A4"/>
</client>
<client name="client B">
    <project name = "project B1"/>
    <project name = "project B2"/>
</client>
<client name="client C">
    <project name = "project C1"/>
    <project name = "project C2"/>
    <project name = "project C3"/>
</client>

모든 프로젝트를 선택하고 정렬 한 다음 아래 예제에서와 같이 3 개의 프로젝트마다 하나의 바운드로 그룹화하고 싶습니다.

<boundle>
  <project name="project A1">
  <project name="project A2">
  <project name="project A3">
</boundle>
<boundle>
  <project name="project A4">
  <project name="project B1">
  <project name="project B2">
</boundle>
<boundle>
  <project name="project C1">
  <project name="project C2">
  <project name="project C3">
</boundle>

현재 그렇게하려면 Boundle 태그를 열고 나중에 닫는 데 사용하고 있습니다. 더 나은 솔루션에 대해 생각할 수 있습니까?

도움이 되었습니까?

해결책

그룹화가 필요하지 않습니다.

<xsl:param name="perGroup" select="3" />

<xsl:variable name="allProjects" select="/client/project" />

<xsl:template match="/">
  <xsl:apply-templates select="$allProjects" mode="counted" />
</xsl:template>

<xsl:template match="project" mode="counted">
  <xsl:if test="position() mod $perGroup = 1">
    <xsl:variable name="pos" select="position()" />
    <boundle>
      <xsl:copy-of select="$allProjects[
        position() &gt;= $pos and position() &lt; ($pos + $perGroup)
      ]" />
    </boundle>
  </xsl:template>
</xsl:template>

다른 팁

다음 링크를 추천 할 수 있습니다 http://www.jenitennison.com/xslt/grouping/ 이를 통해 XML 문서의 내용을 기반으로 다양한 수의 요소를 일부 범주로 그룹화하는 방법을 알아내는 데 도움이되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top