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

时间:2014-10-06 02:02:48

标签: c# .net xml xslt saxon

如何在Saxon-HE中使用XSLT fn:document函数?我知道.net可以使用Xml Resolver的“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

感谢Adavance。萨兰

2 个答案:

答案 0 :(得分:0)

尝试删除transformer.InputXmlResolver = null;行,然后我认为document/doc应该有效。如果没有,那么您可以设置transformer.InputXmlResolver = new XmlUrlResolver();

答案 1 :(得分:0)

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