문제

이와 같은 XSL에 두 개의 중첩 루프가 있습니다.이 순간에 위치 ()를 사용하지만 필요한 것은 아닙니다.

<xsl:for-each select="abc">
  <xsl:for-each select="def">
   I wanna my variable in here increasing fluently 1,2,3,4,5.....n
not like 1,2,3,1,2,3
  </xsl:for-each>
</xsl:for-each>

이 스터브에 대한 아이디어를 줄 수 있습니까? 매우 감사합니다!

도움이 되었습니까?

해결책

XSL을 사용하면 문제는 변수를 변경할 수 없다는 것입니다 (설정하는 상수와 비슷합니다). 따라서 카운터 변수를 증가시키는 것은 작동하지 않습니다.

순차적 카운트 (1,2,3,4, ...)를 얻기위한 서투른 해결 방법은 "ABC"태그 반복을 가져 오기 위해 위치 ()을 호출하는 것입니다. "태그 반복. 그런 다음 "ABC"반복에 포함 된 "DEF"태그 수를 곱해야합니다. 그렇기 때문에 이것이 "서투른"해결 방법입니다.

두 개의 중첩 된 "DEF"태그가 있다고 가정하면 XSL은 다음과 같이 보입니다.

<xsl:for-each select="abc">
    <xsl:variable name="level1Count" select="position() - 1"/>
    <xsl:for-each select="def">
        <xsl:variable name="level2Count" select="$level1Count * 2 + position()"/>
        <xsl:value-of select="$level2Count" />
    </xsl:for-each>
</xsl:for-each>

다른 팁

반복 할 항목을 선택하는 방법을 변경하십시오.

<xsl:for-each select="abc/def">
    <xsl:value-of select="position()"/>
</xsl:for-each>

중첩 루프를 구체적으로 유지 해야하는 경우 다음과 같은 또 다른 루프를 추가하는 것을 고려하십시오.

<xsl:variable name="items" select="//abc/def"/>
<xsl:for-each select="abc">
    <xsl:for-each select="def">
        <xsl:variable name="id" select="generate-id()"/>
        <xsl:for-each select="$items">
            <xsl:if test="generate-id()=$id">
                 <xsl:value-of select="position()"/>
            </xsl:if>
        </xsl:for-each>
    </xsl:for-each>
</xsl:for-each>
<xsl:for-each select="abc">
    <xsl:variable name="i" select="position()"/>
    <xsl:for-each select="def">
        <xsl:value-of select="$i" />
    </xsl:for-each>
</xsl:for-each>

이것은 다양한 수의 하위 요소를 처리하는 Pythonquick의 답변의 확장입니다.

<xsl:for-each select="abc">  
    <xsl:variable name="level1Position" select="position()"/>
    <xsl:variable name="priorCount" select="count(../abc[position() &lt; $level1Position]/def)"/>  
    <xsl:for-each select="def">
        <xsl:variable name="level2Count" select="$priorCount + position()"/>
        <xsl:value-of select="$level2Count" />
    </xsl:for-each>
</xsl:for-each>

입력:

<root>
    <abc>
        <def>A</def>
        <def>B</def>
        <def>C</def>
    </abc>
    <abc>
        <def>D</def>
        <def>E</def>
    </abc>
    <abc>
        <def>F</def>
    </abc>
    <abc>
        <def>G</def>
        <def>H</def>
        <def>I</def>
    </abc>
</root>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top