2013-06-19 1 views
0

만약 우리가 다음과 같은 XML 구조 :XSLT - 일치하지 않는 구조를 통해 반복하는

<Tree> 
    <Apple> 
    <Size>6</Size> 
    </Apple> 
    <Apple> 
    <Size>4</Size> 
    </Apple> 
    <Apple> 
    <Size>3</Size> 
    </Apple> 
</Tree> 

그것은 같은과 함께 다음 - 인라인 사과의 크기를 표시하는 것은 매우 쉽습니다 :

<xsl:for-each select="Tree/Apple"> 
    <xsl:value-of select="following-sibling::*/Size"> 
</xsl:for-each> 

하지만 당신의 트리 구조를 보유 할 수 지점으로, 조금 더 복잡한 어떤 경우 하나 개 이상의 사과 :

<Tree> 
    <Branch> 
    <Apple> 
     <Size>6</Size> 
    </Apple> 
    </Branch> 
    <Branch> 
    <Apple> 
     <Size>4</Size> 
    </Apple> 
    <Apple> 
     <Size>3</Size> 
    </Apple> 
    </Branch> 
</Tree> 

우리는 항상 next-in-line 사과를 선택할 수 있습니까? (6-4-3)

나는 조건을 사용하여 더 이상 사과 자식이 있는지 확인하고, 그렇지 않은 경우 다음 분기에서 선택하여이 사실을 확인할 수 있습니다. 그러나 선택 라인 하나만으로이를 달성 할 수 있습니까?

많은 도움에 감사드립니다. 또한 다음과 같이 뭔가를 시도 할 수

<xsl:for-each select="Tree//Apple"> 
    <xsl:value-of select="following::Apple[1]/Size"> 
</xsl:for-each> 

답변

2

당신은 다음과 같은 사용하는 경우 문서의 아무 곳이나 나중에 다음 애플을 찾는 following 축을 사용할 수 있습니다

<xsl:template match="Apple"> 
    <xsl:copy-of select= 
     "(following-sibling::Apple | ../following-sibling::*/Apple)[1]/Size"/> 
</xsl:template> 

XML이 더욱 복잡해지면이 작업은 조금 더 안정적 일 수 있습니다. "동일한 레벨의 Apple이지만 다른 부모의 것이 될 수 있습니다."

0

:

1

일반적으로 일관성없는 구조를 반복하는 방법은 xsl : apply-templates 및 템플릿 규칙을 사용하는 것입니다.

사과 예제의 경우 출력에 따라 달라집니다.

관련 문제