2014-10-15 1 views
1

xsl : number 요소가 생성하는 시퀀스를 "초기화"하는 방법이 있습니까? XSLT 2.0 : <xsl:number> "초기화"

는 예를 들어 번호는 다음과 같은 출력을 생성하는 경우 :

1 
1.1 
1.1.1 

내가 2로 초기화하는 것은 예를 들면 그것은 다음과 같은 결과가 생성됩니다 싶습니다

2 
2.1 
2.1.1 

등등을 ..

그럴 가능성이 있습니까, 아니면 그것을 달성하기 위해 자신의 함수/템플릿을 만들어야합니까?

답변

1

나는 http://www.w3.org/TR/xslt-30/#numberstart-at 속성이 있지만 Saxon 9.6 PE 또는 EE와 XSLT 3.0을 사용해야한다고 생각합니다.

+0

답장을 보내 주셔서 대단히 감사합니다.하지만 슬프게도 현재 XSLT 2.0 만 인식하는 AltovaXML이 붙어 있습니다. XSLT 2.0 엔진을 사용하여이를 달성 할 수있는 방법이 있습니까? – Vlax

+0

XSLT 3.0이 XSLT 2.0에서 새로운 속성을 도입 할 필요성을 느꼈을 때 특정 정수 값으로 시작하는 숫자를 쉽게 만들 수있는 기능은 없다고 생각합니다. 변수에 xsl : number 결과를 저장하고 그 구성 요소를 조작하려고 시도합니다. '. –

+0

나는 정직하게 너와 같은 생각을했는데, 그 결과를 토큰 화하는 문자열 결과로 바이올린을 써야했지만, 내 대답은 더 단순 해 보였다. 경우에 따라 작동하지 않을 수있는 것이 있으면 알려주십시오. 어쨌든 감사합니다. 감사합니다. – Vlax

0

그런데 사실 나는 그 일 것이라고 생각하지 않았다 그러나 작동하는 것 같다 않습니다

이 예 입력 XML에 대한

:

<root> 
    <item/> 
    <item> 
     <item/> 
    </item> 
    <item/> 
    <item/> 
    <item/> 
</root> 

및 변환 테스트하려면이 XSLT를 사용하여 :

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
     <result> 
      <xsl:apply-templates/> 
     </result> 
    </xsl:template> 
    <xsl:template match="item"> 
     <xsl:variable name="currItem"> 
      <xsl:number count="item" level="multiple"/> 
     </xsl:variable> 
     <item numer="{$currItem+1}"/> 
     <xsl:apply-templates/> 
    </xsl:template> 
</xsl:stylesheet> 

당신은 그것을 달성 할 수 있습니다. $ currItem + 1이 초기화가 일어나는 부분입니다.

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

<?xml version="1.0" encoding="UTF-8"?> 
<result> 
    <item numer="2"/> 
    <item numer="3"/> 
    <item numer="3.1"/> 
    <item numer="4"/> 
    <item numer="5"/> 
    <item numer="6"/> 
</result> 

감사

+2

나는이 문제가 중첩은 3 레벨 이상 깊이''입니다. 이 경우 1에서 3.1.1을 추가하려고 시도하고 오류가 발생합니다! 그래도 XML에 두 단계의 중첩 만 있으면 괜찮습니다. –

+0

당신이 맞습니다. 해결책이 아닙니다. – Vlax

0

이 실제로 새 XSLT 3.0 사양으로 만들 가능성이 높습니다. 공개 버그 보고서는 https://www.w3.org/Bugs/Public/show_bug.cgi?id=27060을 참조하십시오. 허용되는 경우 (그리고 그렇게 보일 때) 레벨 당 표현식 xsl:number 시작 값이 더 자유 롭습니다.

물론 이것은 XSLT 3.0 프로세서를 사용해야 할 것입니다.