我正在使用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一样。问题是我难以理解如何将文档提供给Saxon,这将由document()
函数引用。
如何使用document()
函数读取Saxon XSLT中的XML流?
答案 0 :(得分:1)
将xsltTransformer的InputXmlResolver属性设置为XmlResolver,该XmlResolver识别传递给document()函数的URI并返回相应的输入流。