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()函数将引用的撒克逊人。

如何使用该document()函数在 Saxon XSLT 中读取 XML 流?

4

1 回答 1

1

将 xsltTransformer 的 InputXmlResolver 属性设置为 XmlResolver,该属性可识别传递给 document() 函数的 URI 并返回相应的输入流。

于 2013-10-03T22:53:27.163 回答