0

我正在使用 Saxon 9.3 HE 和 Java 1.6。我可以通过在实例上提供解析器来解析 xsl 中的语句xsl:includexsl:importsetURIResolverTransformerFactory

但是,Source resolve(String includee, String includer)如果文件之前已解析,则不会调用该方法。这对我来说是个问题,因为我想根据includer文件进行不同的解决。例如<xsl:include href="foo.xsl"/>infile1.xsl将是与<xsl:include href="foo.xsl"/>in不同的文件file2.xslfile1.xsl并且file2.xsl将包含在file3.xsl. 我有一些“基本”代码和“客户特定”代码可以覆盖模板文件,我需要为我正在构建的框架以不同的方式解决它们。

4

2 回答 2

1

XSLT 规范很清楚,必须根据处理相对 URI 的标准规则来解析 href 属性中的相对 URI 与包含元素的基本 URI,而取消引用生成的绝对 URI 可以通过实现喜欢的任何方式来完成。我建议重新考虑您的设计以考虑到这一点。

于 2012-06-25T20:14:03.947 回答
0

我会预料到,因为其中包含的两个 XSL 具有不同的基本 URI,因此需要为每个基本 URI 调用 URIResolver(如果它们位于不同的目录中怎么办?)。

为 file1.xsl 和 file2.xsl 创建源时,它们的系统 ID 是什么?如果它们为空,存在于同一目录中或没有任何路径信息(即 systemId 只是file1.xsland file2.xsl),则可能 Saxon 正在尝试通过假设它们位于同一目录中来进行优化,因此假设foo.xsl每个都引用的是同一个文件。

也许尝试显式设置基础文件源的 systemId并使它们具有不同的目录?

于 2012-06-21T23:15:10.263 回答