0

我编写了以下代码来获取Saxon.Api.XsltTransformer可用于转换 XML 文档的对象。 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?

4

1 回答 1

1

使用 XSLT 编写样式表模块的常用方法不依赖于 XSLT 处理器 API,而是将代码放在样式表中(例如module1.xsl),然后使用 或 将其包含或导入到其他样式表xsl:includexsl:import。有关详细信息,请参阅http://www.w3.org/TR/xslt20/#combining-modules。但是,您需要确保您的模块是完整的、格式良好的 XSLT 文档,而不是单个xsl:param元素。

当然,如果您将所有 XSLT 作为字符串仅在内存中可用,那么您需要确保为 XsltCompiler 设置的http://www.saxonica.com/documentation/dotnetdoc/Saxon/Api/XsltCompiler.html#XmlResolver解析相对 URL 以从字符串加载另一个模块。

于 2013-09-24T16:59:28.563 回答