0

次のように document() の使用を理解しています。

<xsl:value-of select="document('path\to\docuemnt.xml')/RootElement/Element"/>

これは、親 XSL ファイルへの相対パスでなければなりません。しかし、ローカル ネットワーク上の別のサーバーでホストされているファイルを参照する必要がある場合はどうすればよいでしょうか? などを試してみました。

<xsl:value-of select="document('\\servername\path\to\document.xml')/RootElement/Element"/>

しかし、これはエラーをスローします。

C:\path\to\xsl\\servername\path\to\document.xml

もちろん、これは存在しません。

4

2 に答える 2

3

document() の理解は正しくありません。ファイル名ではなく、URI が必要です。

于 2012-09-10T10:57:34.223 に答える
3

このソリューションは、Windows 7 のコンソール アプリケーション フォームの Saxon-HE 9.4.0.3N XSLT プロセッサにのみ関連します。

私の実験では、document() 関数がファイル名または URI を受け入れることがわかりました。ただし、短い形式にする必要があるため、ファイル名は避けます。長い形式を使用すると、ファイル名は拒否されます。

あなたの文書が...

c:\path\to\document.xml

ドライブ「j」にマップされているサーバー「servername」上。

これを document() パラメータ値として使用して URI を形成するには...

file:///j:/path/to/document.xml

URI に関しては、Saxon が長い形式を受け入れないという誤解がありました。これはファイル名にのみ適用されます。ただし、落とし穴がいくつかあります...

  1. スラッシュに注意してください。バックスラッシュは機能しません。
  2. 実行可能なファイルを作成する方法が見つかりませんでした: UNC 名だけの URI。ドライブを文字にマッピングする必要があります。
  3. 何らかの理由でドキュメントを開けない場合は、同じエラーとして報告されます。ファイル システムでは、問題が発生する可能性が非常に高いため、ファイルを開けない場合に URI が間違っていると想定するのは安全ではありません。特定の時間にファイルを開くことができないのには、多くのありふれた理由が考えられます。
  4. ファイアウォールの問題に注意してください。これらが役割を果たします。
  5. NotePad++ などの多くのテキスト エディターは、BOM がなく、2 つの UTF-16 エンコーディングのいずれかでエンコードされていない場合、テキスト ファイルがシステム コード ページでエンコードされていると想定します。Saxon は、ファイルが UTF-8 でエンコードされているというデフォルトの想定を行うため、NotePad++ でこのような文字 (ä) と私のコード ページがある場合、Saxon はダミーを吐き出し、開くことができないと報告します。ファイル。(余談ですが、私のコードページが何であるかはわかりません。私のOSはWin7で、現在のシステムロケールは英語(オーストラリア)です。システムコードページを決定するのはシステムローカルです)。Saxon がドキュメントを開かない理由は、一部のコード ページでエンコードされた (ä) が、有効な UTF-8 シーケンスではないバイト シーケンスになるためです。
  6. URL パスではない URI パスは、基盤となるオペレーティング システムではサポートされていません。Saxon は document() 関数に関連して URI をサポートしていると正直に言うかもしれませんが、実際にはそれらを使用できないため、キャベツを沸騰させることはありません。- 少なくとも Windows ファミリの o/s ではありません。
  7. ファイル プロトコルに関するMSDN ページは無視してください。そのページで提案されている URL の形式 (| 文字など) は、Saxon の document() 関数では受け入れられません。上記で提案したフォームを使用してください。私はそれをテストしましたが、動作します。
于 2012-09-10T13:31:41.597 に答える