2009-04-02 18 views
17

XSL変換で変数を印刷する方法を教えてもらえますか?やりがいのあるもののように見えますが、私はそれをすることができません。ここで私が持っているコードです:XSL変数の値を印刷する

<?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> 

私は「Wibble」(文字列 - ではないノード)のxmlElemの値でこのテンプレートを呼び出した場合、私は次の出力を得るでしょう:

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

だから私のパラメータが適切に来ている、私はちょうどそれを正しくアクセスすることはできません。誰かが私が見るように、私は正常にプリントアウトする$ xmlElemを得ることができる方法を教えてもらえます:任意の入力のための

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

感謝を。あなたが使用することができます

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

私は以前の答えによって残されたいくつかのギャップを埋めました。良い質問! –

+1

彼の答えが非常に有益であり、「方法」だけでなく「なぜ」を説明しているかを考慮して、Dimitreの回答を「受け入れられる」とマークすることを検討してください。ありがとうございました! –

答えて

31

すべての答えは重要な何かが欠けている:読み取りさらに:

誰かが私のXSL 内の変数変換をどのように プリントアウトを教えていただけますか?私はちょうど することができないようにするには十分なように見える。 XSLT 1.0で

それはスカラー値(文字列、数値、またはブール値)が含まれ、又は構造化された値を有するかどうかに応じ<xsl:variable>のコンテンツを生成する2つの主な方法、ある - リンパ節転移はセット(XML文書(複数可)からの1つまたは複数のノード):

  1. <xsl:value-of select="$yourscalarVariableName"/>スカラー値を生成するために使用します。実際には、このスカラー値を含むテキストノードを生成します。

  2. <xsl:copy-of select="$yourStructuredVariableName"/>これを使用して、変数に含まれるすべてのノードのコピーを作成します。

xsl:variableノードのリストを含み、<xsl:value-of ...>命令が使用される場合、最初のノードの唯一の文字列値が生成されることを知ることは非常に重要です。これは頻繁にコミットされたエラーとFAQです。

第三の方法があります:<xsl:variable>属性を製造する際に使用すべきか:中括弧(AVT -- attribute-value-templateと呼ばれる)で

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

XPath式が評価され、その結果が投入されます属性値。xsl:variableに含まれる各ノードに対して1つの - XSLT 2.0で

<xsl:value-of .../>命令は、互換モードでない実行すると、テキストノードのリストを生成します。互換モード(属性version="1.0"が指定されている)で実行される場合、<xsl:value-of>命令はXSLT 1.0と同じように動作します。

Xslt 2.0<xsl:copy-of>は、XSLT 1.0と同じように動作します。しかし、新しい<xsl:sequence>命令は、前者がすべてのノードの新しいコピーを生成し、<xsl:sequence>が新しいノードのコピーを生成しないため、使用することを推奨します。

+0

+1非常に有益で、うまくいった! –

+0

@ Andrew-Hareありがとう、私はあなたの意見を非常に重視しています! –

10

はこれを試してみてください。次のものが必要です。

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

あなたは私がそれを試みたと思います!ありがとう。 –

+0

時には、最も簡単な解決策が最も難しいです!私が助けることができてうれしいよ:) –

4

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

{$ xmlElem}構文は専用属性内で動作

関連する問題