2014-06-13 1 views
2

value-of은 끔찍합니다. 텍스트 노드에 많은 수의 변수 값을 삽입해야 할 경우 실제로 XSL 파일이 오염됩니다.텍스트 노드의 XSL 속성 식 표기법

출력 텍스트 노드 내부에서 속성 표현 표기법, 즉 text text {$variable}을 사용할 수있는 방법이 있습니까? 아니면 적어도 value-of보다 간결한 무엇입니까?

+0

여기서 입력 및 원하는 출력의 예가 실제로 유용 할 수 있습니다. Offhand, 명명 된 템플릿을 사용하는 것이 좋습니다. –

+0

여기 예제를 참조하십시오 : http://stackoverflow.com/questions/22265164/string-replace-and-concatenation/22272894#22272894 –

답변

3

연결을 사용할 수 있습니다.

<xsl:value-of select="concat(
    'text text ', 
    $variable, 
    'text text ', 
    $variable, 
    'text text' 
)" /> 
+0

나는 내 대답에 1.0/2.0 옵션으로'concat()'를 추가하려고했다. +1 –

+0

아마도 이것이 최선의 선택 일 것입니다. – Reinderien

+0

XSLT 1.0에서는 분명히 있습니다. – Tomalak

4

XSLT 1.0에는 없습니다. 그러나 XSLT 3.0에서는 TVT (text value templates)를 사용할 수 있습니다. AVT (attribute value templates)와 동일하게 작동합니다.

TVT를 사용하려면 표준 속성 xsl:expand-text="yes"을 요소에 추가하십시오. 그러면 프로세서가 해당 요소의 자손 텍스트 노드를 TVT로 처리합니다.

예 :

XSLT 3.0

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" omit-xml-declaration="yes"/> 

    <xsl:template match="/"> 
     <xsl:variable name="who" select="'Dan'"/> 
     <xsl:variable name="what" select="'BAM!'"/> 
     <result xsl:expand-text="yes">This is {$who}'s result: {$what}</result> 
    </xsl:template> 

</xsl:stylesheet> 

출력 (입력과 같은 임의의 잘 형성된 XML을 사용하여)

<result>This is Dan's result: BAM!</result> 

참고하여 테스트 슨-PE 9.5 .

여기에 평가되는 "자손"텍스트 노드를 보여주는 좋은 예 ...

XML 입력

<test> 
    <v1>one</v1> 
    <v2>two</v2> 
    <v3>three</v3> 
</test> 

XSLT 3.0

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="/*"> 
     <result xsl:expand-text="yes"> 
      <value>Value of v1: {v1}</value> 
      <value>Value of v2: {v2}</value> 
      <value>Value of v3: {v3}</value> 
     </result> 
    </xsl:template> 

</xsl:stylesheet> 

출력입니다

<result> 
    <value>Value of v1: one</value> 
    <value>Value of v2: two</value> 
    <value>Value of v3: three</value> 
</result> 
+1

이것은 XSLT 3.0에서 제가 가장 좋아하는 기능 중 하나입니다. – helderdarocha

+0

이것이 흥미 롭긴하지만 불행하게도 1.0으로 제한됩니다. – Reinderien

+0

@Reinderien - 매우 불행합니다. –