如何在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。萨兰
答案 0 :(得分:0)
尝试删除transformer.InputXmlResolver = null;
行,然后我认为document/doc
应该有效。如果没有,那么您可以设置transformer.InputXmlResolver = new XmlUrlResolver();
。
答案 1 :(得分:0)
你不会说出你的样式表正在做什么,或者它是如何失败的,所以我们在这里不知不觉地工作。我的猜测是你对document()调用的参数是一个相对URI,它失败了,因为没有已知的基URI或不正确的基URI。默认情况下,document()使用样式表的基URI,并且从Stream加载样式表时未知,因此您需要在XsltCompiler上设置BaseUri属性。