2011-07-26 17 views
2

これが可能かどうかは不明ですが、動的に作成されたノードブロックから値を取り出すときに、exslt:node-setと入力する必要がないものを設定しようとしています。変数の中にノードのセット全体を格納しておき、それをexslt:node-setでラップしていますが、それから引き出すときになぜ機能しないのですか?これは可能ですか? XSLT 1.0でexslt:node-setを自動化しますか?

<xsl:variable name="LANG"> 
    <xsl:variable name="tmp"> 
     <xsl:element name="foo"> 
      <xsl:element name="bar">Hello</xsl:element> 
     </xsl:element> 
    </xsl:variable> 
    <xsl:value-of select="exslt:node-set($tmp)"/> 
</xsl:variable> 


<!-- Love to be able to do this --> 
<xsl:value-of select="$LANG/foo/bar"/> 

<!-- This does work --> 
<xsl:value-of select="exslt:node-set($LANG)/foo/bar"/> 

答えて

2

、あなたの例のように定義された変数は、結果ツリーフラグメント(RTF)と呼ばれ、あなただけの全体をコピーするには、結果ツリーやxsl:value-of全体フラグメントをコピーするxsl:copy-ofを使用することができますコンテンツ例

<xsl:copy-of select="$LANG"/> 

変数を一時的なツリーとして扱う場合は、拡張子がnode-set()である必要があります。

XSLT 1.0のスタティックツリーフラグメント(ルックアップテーブルなど)を扱う一般的な方法は、スタイルシートのルート要素の子として(カスタム名前空間を使用して)定義することです。次に、document()関数を使用して、必要な値を取得することができます。

あなたはサクソン(V> 6.5)を使用している場合は、単に1.1にスタイルシートのバージョンを設定することができ、あなたは任意のノード・セット拡張せずにRTFを管理することができるようになります。


[XSLT 1.0]

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:empo="http://stackoverflow.com/users/253811/empo"> 

    <empo:LANG> 
     <empo:foo> 
      <empo:bar>Hello</empo:bar> 
     </empo:foo> 
    </empo:LANG> 

    <xsl:template match="/"> 
     <xsl:variable name="LANG" select="document('')/*/empo:LANG"/> 
     <xsl:value-of select="$LANG/empo:foo/empo:bar"/> 
    </xsl:template> 

</xsl:stylesheet> 
関連する問題