6

XSLT ドキュメント内で、現在のディレクトリ内の一連のファイルをループすることは可能ですか?

レポートを生成するために何らかの分析を行う必要がある xml ファイルでいっぱいのディレクトリがある状況があります。スタイルシートは 1 つのドキュメントで問題なく動作していますが、別のツールを使用して XML ドキュメントをマージせずにスタイルシートを拡張したいと考えています。

私はこれらの線に沿って考えていました:

<xsl:for-each select="{IO Selector Here}">
    <xsl:variable select="document(@url)" name="contents" />
    <!--More stuff here-->
</xsl:for-each>
4

6 に答える 6

8

collection()XSLT 2.0およびSaxonでは、次の関数を使用してこれを行うことができます。

<xsl:for-each select="file:///path/to/directory">
  <!-- process the documents -->
</xsl:for-each>

詳細については、 http://www.saxonica.com/documentation/sourcedocs/collections.htmlを参照してください。

XSLT 1.0では、別のツールで処理するドキュメントを一覧表示するインデックスを作成する必要があります。あなたの環境はそのようなツールを提供するかもしれません。たとえば、Cocoonには、そのようなインデックスを作成するディレクトリジェネレータがあります。しかし、あなたの環境が何であるかを知らなければ、何を推奨すべきかを知ることは困難です。

于 2008-09-19T19:22:52.797 に答える
2

他の人が言ったように、プラットフォームに依存しない方法でそれを行うことはできません。.NET の世界では、document('dir://c:/foo/') が 'c:\foo' ディレクトリ内のファイルのリストを任意の形式で返すように、カスタム XmlResolver を作成できます。カスタム XmlResolver の詳細については、次のリンクを参照してください。

XmlUrlResolver クラスのカスタマイズ XmlResolver
のパワー

また、XSLT スタイルシートでスクリプト ( msxsl:script要素など) または拡張機能を使用することもできます。

これらのアプローチはすべて、XSLT コードを他のプラットフォームに移植できなくします。

于 2008-09-19T19:23:59.423 に答える
0

XSLT内からは、これは不可能だと思います。

すべてのXMLファイル名をコンマ区切りのリストとして<xsl:param name = "files" />に渡し、再帰とsubstring-before()およびsubstring-after()を使用してループすることができます。

于 2008-09-19T16:10:20.747 に答える
0

これに使用できるコマンドラインツールがあります。Antに組み込まれているXSLTプロセッサ(Javaビルドツール)を使用して、入力を処理し、出力に変換します。ループ用のバッチファイルで簡単にラップできます。

svn://donie.homeip.net/public/tools

于 2008-09-19T16:14:30.410 に答える
0

XSL がそのように動作するように設定されているとは思いません。XSL は、1 つまたは複数のドキュメントで他の何かによって使用されるように設計されており、XSLT を適用する必要があるファイルを見つける責任があるのは他の何かです。

1 つのメイン ドキュメントとサポート ドキュメントの固定セットがある場合、このdocument()関数を使用して特定のノードや値を返すことができますが、ケースは異なると思います。

于 2008-09-19T15:33:53.860 に答える
0

.Net を使用している場合は、XsltExtension を使用して、XSLT ドキュメントから .net クラスのメソッドを呼び出すことができます。このメソッドは、ノードセットを XSLT に返すことができます。したがって、メソッドはファイル IO 部分を処理できます。

于 2008-09-22T14:38:19.633 に答える