2009-04-02 6 views
17

내 XSL 변환에서 변수를 출력하는 방법을 알려줄 수 있습니까? 할 수있는 일은 충분히 쉬울 것 같지만 그저 그렇게 할 수없는 것 같습니다.XSL 변수의 값 인쇄

<Wibble> 
     1: {$xmlElem}. 
     2: {$xmlElem}. 
</Wibble> 

: 나는 다음과 같은 출력을 얻을 것이다 - 나는 "Wibble"(안 노드 문자열)의 xmlElem 값이 템플릿을 호출하면

<?xml version='1.0' encoding='UTF-8' ?> 
<xsl:stylesheet version="1.0" 
    xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template name="ControlledListStructure"> 
    <xsl:param name="xmlElem" /> 
    <xsl:param name="dataName" /> 

    <xsl:element name="{$xmlElem}"> 
     1: <xsl:text>{$xmlElem}</xsl:text>. 
     2: {$xmlElem}. 
    </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

가 : 여기 내가 가지고있는 코드는 따라서 매개 변수가 제대로 전달되고 있으며 올바르게 액세스 할 수 없습니다. 누군가 내가 $ xmlElem을 어떻게 볼 수 있도록 제대로 인쇄 할 수 있는지 말해 줄 수 있나요?

<Wibble> 
     1: Wibble. 
     2: Wibble. 
</Wibble> 

감사합니다.

+1

나는 이전 답변에 의해 남겨진 약간의 틈새를 메웠다. 좋은 질문! –

+1

Dimitre의 답변에 "Accepted"라고 표시하는 것을 고려해보십시오. 그의 답변은 매우 유익하고 "how"뿐만 아니라 "why"를 설명합니다. 고맙습니다! –

답변

31

모든 답변은 중요한 무언가를 누락 : 읽기 더 :

누군가가 내 XSL 의 변수 변환 방법 인쇄를 말해 주시겠습니까? 쉽게 할 수있는 것 같아 보이지만, 단지 처럼 보이지는 않습니다.

XSLT 1.0

는 (문자열, 숫자 또는 부울) 스칼라 값을 포함하거나 구조화 된 값을 갖는지 여부에 따라 한 <xsl:variable>를 콘텐츠의 제조 두 가지 방법이있다 - 노드 - 세트 (XML 문서 (들)에서 하나 개 이상의 노드) :

  1. <xsl:value-of select="$yourscalarVariableName"/> 사용이 스칼라 값을 생성합니다. 실제로이 스칼라 값을 포함하는 텍스트 노드를 생성합니다.

  2. <xsl:copy-of select="$yourStructuredVariableName"/> 변수에 포함 된 모든 노드의 사본을 생성하려면 이것을 사용하십시오.

xsl:variable 노드의 목록을 포함하고 <xsl:value-of ...> 명령을 사용하는 경우, 첫 번째 노드의 문자열 값이 생성됩니다을 아는 것이 매우 중요합니다. 이것은 자주 커밋 된 오류 및 FAQ입니다.

세 번째 방법가 다음 <xsl:variable>가 속성의 제조에 사용되어야하는 경우 :

<someLiteralResultElement someAttribute="{$theVariable}"/> 

(AVT -- attribute-value-template 불림) 중괄호에 XPath식이 평가하고 그 결과는에 넣고 속성 값.xsl:variable에 포함 된 각 노드에 대해 한 - XSLT 2.0에서

<xsl:value-of .../> 명령은, 호환 모드에 있지 실행할 때, 텍스트 노드의 목록을 생성합니다. 호환 모드 (특성이 version="1.0" 인 경우)에서 실행하면 <xsl:value-of> 명령어는 XSLT 1.0에서와 동일한 방식으로 작동합니다.

xlslt 2.0<xsl:copy-of>은 XSLT 1.0에서와 같은 방식으로 동작합니다. 그러나 새 <xsl:sequence> 명령어는 모든 노드의 새 복사본을 생성하지만 <xsl:sequence>은 노드의 새 복사본을 생성하지 않으므로 사용하는 것이 좋습니다.

+0

+1 매우 유익하고 멋지게 완료되었습니다. –

+0

@ Andrew-Hare 감사합니다. 나는 당신의 의견을 매우 소중하게 생각합니다! –

10

이 시도 :

<xsl:value-of select="$xmlElem"/> 
+0

당신은 내가 그랬 으면한다고 생각합니다! 감사. –

+0

간혹 가장 간단한 해결책이 가장 어렵습니다! 다행히 도울 수있어 :) –

4

당신은 사용할 수 있습니다

<xsl:value-of select="$xmlElem" /> 
3

은 {$ xmlElem} 구문은 속성 내에서 작동합니다. 당신이 필요합니다

<xsl:value-of select="$xslElem" />