2012-04-10 3 views
0

저는 xsl에 매우 익숙하며 xml 메시지를 구문 분석하고 템플릿을 호출하는 스크립트를 작성하려고합니다 (입력을 형식화 할 수있는 권한이 없습니다). XML 메시지의 일부 필드는 여러 번 나타날 수 있습니다. 이 경우 "StringValue"끝에 숫자를 추가하고 해당 발생을 지정하는 call-template의 with-param = "pet"에 전달하려고합니다.XSL 텍스트를 xsl : number와 연결하는 방법?

아래 코드는 내가 원하는 것을 수행하는 것 같습니다. 그러나 XML Spy는 그것이 잘못된 XML이라고 말합니다. "Dog/Color"의 각 템플릿 일치에 대해 "StringValue"및 "1", "StringValue"및 "2"등을 추가하는 더 좋은 방법이 있습니까? 예를 들어

: 사전에

<xsl:template match="Dog/Color"> 
    <xsl:call-template name="FormatContents"> 
      <xsl:with-param name="pet">StringValue<xsl:number level="any"/></xsl:with-param> 
      <xsl:with-param name="color"> 
        <xsl:value-of select="."/> 
      </xsl:with-param> 
    </xsl:call-template> 
</xsl:template> 

감사합니다!

+0

http://stackoverflow.com/questions/10090271/xsl-how-to-concatenate -text-with-xslnumber – thejartender

답변

2

당신이 준 조각은 유효 오류가 비트에서 나온 확신? 완전한 예제를 게시하는 것이 가장 좋습니다.

입력 :

<Dog> 
<Color>Red</Color> 
<Color>Green</Color> 
</Dog> 

XSLT 1

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="Dog/Color"> 
<xsl:call-template name="FormatContents"> 
    <xsl:with-param name="pet">StringValue<xsl:number level="any"/></xsl:with-param> 
    <xsl:with-param name="color"> 
    <xsl:value-of select="."/> 
    </xsl:with-param> 
</xsl:call-template> 
</xsl:template> 

<xsl:template name="FormatContents"> 
<xsl:param name="pet"/> 
<xsl:param name="color"/> 
[<xsl:value-of select="$pet"/>][<xsl:value-of select="$color"/>] 
</xsl:template> 
</xsl:stylesheet> 

출력 :

[StringValue1][Red] 


[StringValue2][Green] 
+0

응답 해 주셔서 감사합니다. 돌아가서 두 번 확인한 후에 XMLSpy에서 호출 템플릿을 보지 못해서 내 오류가 발생한다는 것을 알았습니다. – Mrc0113

0

나는 당신이 원하는 것은이라고 생각 position() - 즉 :

<xsl:template match="Dog/Color"> 
    <xsl:call-template name="FormatContents"> 
    <xsl:with-param name="pet">StringValue<xsl:value-of select="position()"/></xsl:with-param> 
    <xsl:with-param name="color"> 
     <xsl:value-of select="."/> 
    </xsl:with-param> 
    </xsl:call-template> 
</xsl:template> 
+0

position()은 (일반적으로) xsl : number level = "any"와 동일한 숫자를 제공하지 않습니다. –