2011-01-27 8 views
3

ドキュメントからわかるように、空の文字列をパラメータとして持つXSLT関数document()は、現在のXSLTドキュメントを読み込む必要があります。しかし、次のコードは動作しません:私は(ちょうど例)いくつかのXMLに、このXSLTを適用するとXSLTドキュメント( '')関数が機能しません

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <state>test2</state> 
    <xsl:template match="/"> 
     test1 
     <xsl:value-of select="document('')/*/state"/> 
    </xsl:template> 
    </xsl:stylesheet> 

、私は出力としてのみ「TEST1」を持っています。なぜ線がありますか

<xsl:value-of select="document('')/*/state"/> 

「test2」は印刷されませんか?

+0

どのように変換を実行していますか? –

+0

は私のために働く。 Eclipse XSL Transformerを実行しているときに、 'test1'と' test2'の両方を取得します。 – dogbane

+0

WindowsでMSXMLライブラリを使用している場合は、ドキュメント関数の使用を有効にする必要があります。 'styledocument.setProperty(" AllowDocumentFunction "、true);' http://msdn.microsoft.com/en-us/library/ us/library/ms256465.aspx –

答えて

9

ドキュメント( '')の定義は、ドキュメント( '')コールを含むスタイルシート内の命令のベースURIと同じURIを持つXMLドキュメントを読み込むことです。外部エンティティを使用しない限り、これは通常、スタイルシートモジュールのベースURIと同じです。うまくいかない場合は、スタイルシートモジュールのベースURIが不明なためです。これは、XSLTプロセッサに、URIを介して取得されたリソースではなく、メモリにあるスタイルシート(文字列やDOMなど)が与えられた場合に、簡単に発生します。たとえば、JAXP StreamSourceを使用し、setSystemId()を呼び出さない場合、ベースURIは不明です。

+0

ありがとうございます! setSystemId()は私の場合に役立ちます – Mikhail

+0

+1良い答え。さらに、 'document()'関数がいくつかの特権レベルで許可されない環境もあります。 –

1

あなたはこのように、独自の名前空間を宣言する必要があります

ユーザ定義のトップレベルの要素は する必要があります。

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:my="http://localhost" 
    exclude-result-prefixes="my"> 
    <xsl:output method="text"/> 

    <my:state>test2</my:state> 

    <xsl:template match="/"> 
     <xsl:text>test1</xsl:text> 
     <xsl:value-of select="document('')/*/my:state"/> 
    </xsl:template> 
</xsl:stylesheet> 

出力リレー:マイケル・ケイを引用

test1test2 

null以外のURIを持つネームスペースに属し、XSLTとは異なります任意の ベンダーによって使用される名前空間URIから異なる が異なることが好ましい。これらの要素は、XSLTプロセッサ によって無視されます。

+0

はJava 6ではまだ動作しません(xalanを使用)。しかし、とにかく感謝、それはXSLプロセッサの使用されたバージョンがいくつかの特別な構文を必要とするようです – Mikhail

+1

+1構文エラーのため。また、[specs](http://www.w3.org/TR/xslt#stylesheet-element)を引用することもできます:* "さらに、' xsl:stylesheet'要素には、XSLT名前空間からではない要素ただし、要素の展開された名前にはnull以外の名前空間URIが含まれている必要があります。 "* –

関連する問題