我编写了以下代码来获取可用于转换XML文档的Saxon.Api.XsltTransformer
对象。 TransformationXslt
是一个包含XSLT的字符串。
XmlDocument document = new XmlDocument();
document.LoadXml(TransformationXslt);
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();
xsltTransformers.Add(transformation.Name, xsltTransformer);
return xsltTransformer;
假设我有十几个或更多XSLT模板,我希望能够从任何 XSLT调用。如何使它们可用于生成的Saxon.Api.XsltTransformer
对象。
假设我有这样的事情:
string commonXslt = "<xsl:param name="Use_This_In_Every_Xslt">Foo!</xsl:param>";
如何让这个“常用”xslt可用于变压器?
答案 0 :(得分:1)
使用XSLT编写样式表模块的常用方法不依赖于XSLT处理器API,而是将代码放在样式表中(例如module1.xsl
),然后使用{{1将其包含或导入其他样式表中}或xsl:include
。有关详细信息,请参阅http://www.w3.org/TR/xslt20/#combining-modules。但是,您需要确保您的模块是一个完整的,格式良好的XSLT文档,而不是单个xsl:import
元素。
当然,如果您的所有XSLT仅在内存中作为字符串提供,那么您需要确保为XsltCompiler设置的http://www.saxonica.com/documentation/dotnetdoc/Saxon/Api/XsltCompiler.html#XmlResolver解析相对URL以从字符串加载另一个模块。