为了方便测试转换结果,自己写了个小程序来用xslt转换xml文档,xslt文档中用到document方法引用外部xml文档。
- 执行转换时报“禁止执行document()函数”。
解决:
//第一个参数代表启用对document()支持,第二个参数代表是否支持script
XsltSettings settings = new XsltSettings(true, false);
reader = new System.Xml.XmlTextReader(xml);
//转换时传入settings参数
transform.Load(xslt, settings, null); - 在执行转换又报错“XSLT编译错误”,调试下发现其实是报的“禁止解析外部URI”。
解决:
//注意第三个参数,不加的话同样无法支持document()
transform.Load(xslt, settings, new XmlUrlResolver());
//最后调用转换函数也得加。
transform.Transform(reader, null, write, new XmlUrlResolver());