사용 :
count(ancestor::book | preceding::book) +1
:
count(preceding::book) +1
하는 것이 가능한 경우 book
요소, 다음 사용할 올바른 표현되고 중첩 된 것으로, 그러나, 메모를 수행 또는을 사용할 수 있습니다. <xsl:number>
전체 코드 : 원하는 정확한 결과를 제작
<books>
<cat>
<book>a</book>
<book>b</book>
</cat>
<cat>
<book>c</book>
<book>d</book>
<book>e</book>
</cat>
</books>
:
이 변환이 제공된 XML 문서에인가
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="book">
<xsl:value-of select=
"concat('book ', ., ' = ', count(preceding::book) +1, '
')"/>
</xsl:template>
</xsl:stylesheet>
book a = 1 book b = 2 book c = 3 book d = 4 book e = 5
II. <xsl:number>
사용 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="book">
<xsl:value-of select="concat('
book ', ., ' = ')"/>
<xsl:number level="any" count="book"/>
</xsl:template>
</xsl:stylesheet>
III. 적절한 <xsl:apply-templates>
으로 position()
사용 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="/*/*/book"/>
</xsl:template>
<xsl:template match="book">
<xsl:value-of select="concat('
book ', ., ' = ', position())"/>
</xsl:template>
</xsl:stylesheet>
설명 :
position()
값이 템플릿의 선택을 야기 <xsl:apply-templates>
의 제조 노드리스트에서 현재 노드의 위치는 실행을 위해. 올바른 <xsl:apply-templates>
을 사용하는 경우 position()
일 수 있습니다.
감사합니다. Dimitre. 정확히 내가 무엇을 찾고 있었는지. 이제 어떻게 작동하는지보기 위해 선행을 찾아야합니다;) – bretter
@bretter, 여러분 환영합니다. 이 답변을 여러 번 편집 했으므로 세 가지 해결책을 모두 보지 못했을 수도 있습니다. 예, '선행'과 '조상'축,''명령,''명령과'position()'함수에 대해서 읽는 것이 흥미로울 것입니다 . –
@DimitreNovatchev - 흥미롭게도 당신이 제공 한 첫 번째 XSLT는 (
ABach