如何在Saxon HE中使用XSLT-fn:document函数

本文关键字:XSLT-fn document 函数 Saxon HE | 更新日期: 2023-09-27 18:25:35

如何在Saxon HE中使用XSLT-fn:document函数?我知道.net可以通过Xml解析程序使用"EnableDocumentFunction"。如何在下面的代码中插入XmlResolver。

#region "saxon"
public static StringWriter saxonmethod(string sourceFile, Stream XSLT)
{
    Processor processor = new Processor();
    TextReader stringReader = new StringReader(sourceFile);
    XmlTextReader reader2 = new XmlTextReader(stringReader);
    reader2.XmlResolver = null;// Load the source document
    XdmNode input = processor.NewDocumentBuilder().Build(reader2);

    // Create a transformer for the stylesheet.
    XsltTransformer transformer = processor.NewXsltCompiler().Compile(XSLT).Load();
    transformer.InputXmlResolver = null;
    // Set the root node of the source document to be the initial context node
    transformer.InitialContextNode = input;
    // Create a serializer
    StringWriter s = new StringWriter();
    Serializer serializer = new Serializer();//serializer.SetOutputWriter(Console.Out);
    serializer.SetOutputWriter(s);
    // Transform the source XML to System.out.
    transformer.Run(serializer);
    return s;
}
#endregion

谢谢阿达万斯。Saran

如何在Saxon HE中使用XSLT-fn:document函数

试着简单地删除transformer.InputXmlResolver = null;行,那么我认为document/doc应该可以工作。如果没有,则可以设置transformer.InputXmlResolver = new XmlUrlResolver();

您没有说明样式表在做什么,也没有说明它是如何失败的,所以我们在这里的工作相当黑暗。我的猜测是,document()调用的参数是一个相对URI,它失败了,因为没有已知的基URI,或者基URI不正确。默认情况下,document()使用样式表的基本URI,当从Stream加载样式表时,这是未知的,因此需要在XsltCompiler上设置BaseUri属性。