【问题标题】:How to add "common" functions to multiple XSLT files?如何向多个 XSLT 文件添加“通用”功能?
【发布时间】:2013-09-29 23:12:54
【问题描述】:

我编写了以下代码来获取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 模板,我希望能够从 any XSLT 调用这些模板。如何使它们可用于生成的 Saxon.Api.XsltTransformer 对象。

假设我有这样的事情:

string commonXslt = "<xsl:param name="Use_This_In_Every_Xslt">Foo!</xsl:param>";

我怎样才能让转换器可以使用这个“通用”xslt?

【问题讨论】:

    标签: xml xslt saxon


    【解决方案1】:

    使用 XSLT 编写样式表模块的常用方法不依赖于 XSLT 处理器 API,而是将代码放在样式表中(例如 module1.xsl),然后使用 xsl:include 或 @ 将其包含或导入到其他样式表中987654325@。有关详细信息,请参阅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 以从字符串加载另一个模块。

    【讨论】:

      猜你喜欢
      • 2017-05-17
      • 2015-05-03
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 2017-11-19
      • 2020-05-19
      相关资源
      最近更新 更多