0

Saxon-HE の .net バージョンを使用しています。

ソース XSLT が外部から渡される (実行時にファイルから読み込まれない) XSLT 変換を設定するコードをいくつか書きました。

これが私のコードのスニペットです:

Saxon.Api.Processor processor = new Saxon.Api.Processor();

// Feed the XSLT into Saxon
XmlDocument document = new XmlDocument();
document.LoadXml(xslt);
Saxon.Api.XdmNode input = processor.NewDocumentBuilder().Build(document);
Saxon.Api.XsltCompiler xsltCompiler = processor.NewXsltCompiler();
Saxon.Api.XsltExecutable xsltExecutable = xsltCompiler.Compile(input);
Saxon.Api.XsltTransformer xsltTransformer = xsltExecutable.Load();

// Create The stream that will contain the transformed XML.
MemoryStream transformedXmlStream = new MemoryStream();
xsltTransformer.InputXmlResolver = null;
// Input the XML into the transformer.
xsltTransformer.InitialContextNode = processor.NewDocumentBuilder().Build(inputXml);
// Set up the serializer that will output the result.
Saxon.Api.Serializer dataSerializer = processor.NewSerializer(transformedXmlStream);
// Run the transformation and get the output as a stream.
xsltTransformer.Run(dataSerializer);

このコードは今のところうまく機能します。

ただし、新しい要件に問題があります。関数を使用していくつかの機能を実装するように依頼されましたがdocument()、これには独自の BaseURI を持つ別の XML ドキュメントが必要です。

この他のドキュメントは、XSLT や入力 XML と同様に、文字列またはストリームとして直接プログラムに供給されます。document()問題は、関数によって参照されるドキュメントを Saxon にフィードする方法を考え出すのに困惑していることです。

document()関数を使用して、Saxon XSLT で XML ストリームを読み取るにはどうすればよいですか?

4

1 に答える 1

1

xsltTransformer の InputXmlResolver プロパティを、document() 関数に渡された URI を認識し、対応する入力ストリームを返す XmlResolver に設定します。

于 2013-10-03T22:53:27.163 に答える