在Java中强制解析xsl:include,xsl:import

时间:2012-06-21 17:10:08

标签: java xslt saxon

我正在使用Saxon 9.3 HE和Java 1.6。我可以通过向xsl:include实例上的xsl:import提供解析程序来解析xsl中的setURIResolverTransformerFactory语句。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我原本以为,因为包含在其中的两个XSL具有不同的基URI,因此需要为每个XIR调用URIResolver(如果它们位于不同的目录中那么?)。

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

也许尝试显式setting the systemId基本文件的来源并使它们有不同的目录?