5

次のように xslt ファイル全体で同じドキュメントを呼び出すことは許容されますか?

<xsl:value-of select="document('doc.xml')/root/bar/foo1" />
<xsl:value-of select="document('doc.xml')/root/bar/foo2" />
<xsl:value-of select="document('doc.xml')/root/bar/foo3" />

...?

キャッシュを使用すると、ファイルを何度も読み取るためのオーバーヘッドが発生するのを回避できると想像できます。

または、doc.xm を変数に格納し、その変数を使用してクエリを実行する必要がありますか?

この場合、xslt1 を使用しているため、xsle のようなある種のライブラリを使用する必要があります。

または、他の解決策はありますか?

注 : XPath の一部は、次のように動的にする必要があります。

<xsl:value-of select="document('doc.xml')/root/*[name()=$lang]/foo3" />
4

2 に答える 2

2

XSLT プロセッサは、同じ URL で document() を 2 回呼び出した場合に、返されるノードが count(document('a.xml')|document('a'xml')) = 1 という意味で同一であることを保証する必要があります。 . ドキュメントをキャッシュせずにこの要件を満たすのは非常に難しいため、各ドキュメントが 1 回だけフェッチされて解析されることを合理的に確信できると思います。ただし、グローバル変数に入れても害はありません。

于 2012-06-13T10:59:36.423 に答える
1

個人的には、これを使用するときは、読みやすくするために、常に変数に入れたり、必要な値を取得したりしています。最後に使用した MSXSL では、ノード ツリーに配置して、その方法でアクセスできました。

XSL プロセッサが何らかの方法で同じファイルをキャッシュしないとは想像できませんが、すべてのプロセッサで異なると思われ、書き留められていないようです。

私が使用しているプロセッサで知りたい場合は、大きなドキュメントをコピーして貼り付け、テストとして時間を計るだけです。時間はかからず、システムで確認する唯一の方法です。

于 2012-06-13T08:46:41.573 に答える