value-of
은 끔찍합니다. 텍스트 노드에 많은 수의 변수 값을 삽입해야 할 경우 실제로 XSL 파일이 오염됩니다.텍스트 노드의 XSL 속성 식 표기법
출력 텍스트 노드 내부에서 속성 표현 표기법, 즉 text text {$variable}
을 사용할 수있는 방법이 있습니까? 아니면 적어도 value-of
보다 간결한 무엇입니까?
value-of
은 끔찍합니다. 텍스트 노드에 많은 수의 변수 값을 삽입해야 할 경우 실제로 XSL 파일이 오염됩니다.텍스트 노드의 XSL 속성 식 표기법
출력 텍스트 노드 내부에서 속성 표현 표기법, 즉 text text {$variable}
을 사용할 수있는 방법이 있습니까? 아니면 적어도 value-of
보다 간결한 무엇입니까?
연결을 사용할 수 있습니다.
<xsl:value-of select="concat(
'text text ',
$variable,
'text text ',
$variable,
'text text'
)" />
나는 내 대답에 1.0/2.0 옵션으로'concat()'를 추가하려고했다. +1 –
아마도 이것이 최선의 선택 일 것입니다. – Reinderien
XSLT 1.0에서는 분명히 있습니다. – Tomalak
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>
이것은 XSLT 3.0에서 제가 가장 좋아하는 기능 중 하나입니다. – helderdarocha
이것이 흥미 롭긴하지만 불행하게도 1.0으로 제한됩니다. – Reinderien
@Reinderien - 매우 불행합니다. –
여기서 입력 및 원하는 출력의 예가 실제로 유용 할 수 있습니다. Offhand, 명명 된 템플릿을 사용하는 것이 좋습니다. –
여기 예제를 참조하십시오 : http://stackoverflow.com/questions/22265164/string-replace-and-concatenation/22272894#22272894 –