如何将“常用”函数添加到多个XSLT文件中?

时间:2013-09-24 16:05:19

标签: xml xslt saxon

我编写了以下代码来获取可用于转换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可用于变压器?

1 个答案:

答案 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以从字符串加载另一个模块。