web-dev-qa-db-ja.com

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>

XmlElemの値が「Wibble」(文字列-ノードではない)でこのテンプレートを呼び出すと、次の出力が得られます。

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

そのため、パラメータが正しく取得され、正しくアクセスできません。 $ xmlElemを正しく印刷して、次のように表示する方法を教えてもらえますか。

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

ご入力いただきありがとうございます。

17
Lee Theobald

すべての回答に重要なものが欠けています:さらに読む:

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です。

3番目の方法があります:属性の生成に<xsl:variable>を使用する必要がある場合:

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

中括弧内のXPath式( AVT --attribute-value-template と呼ばれる)が評価され、結果が出力されます。属性値に。

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

Xslt 2.0では、<xsl:copy-of>はXSLT1.0と同じように動作します。ただし、前者はすべてのノードの新しいコピーを生成するため、新しい <xsl:sequence> 命令を使用することをお勧めします。 、一方、<xsl:sequence>はノードの新しいコピーを生成しません。

32

これを試して:

<xsl:value-of select="$xmlElem"/>
10
Andrew Hare

次を使用できます。

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

{$xmlElem}構文は属性内でのみ機能します。必要なもの:

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