我正在尝试使用 Java / Xalan 以及来自https://sourceforge.net/projects/docbook/files/docbook-xsl/1.76.1/的官方 Docbook XSL 文件与一些本地 xsl的混合将一些 Docbook XSL 转换为 HTML提供一些自定义和覆盖的文件。
我想防止我的应用程序不得不下载外部资源或访问本地文件。所以我实现了一个扩展 URIResolver 接口的类。
问题是该resolve(final String href, final String base)
函数没有提供足够的信息来识别正在请求的特定文件。
例如,本地覆盖文件之一是使用 .xsl 文件从 xsl 文件导入的<xsl:import href="../../../xsl/html.xsl"/>
。在这种情况下,我的解析器类的 href 参数设置为 ../../../xsl/html.xsl,这很好。html.xsl 文件然后导入一个名为 defaults.xsl 的文件。href 参数设置为仅 defaults.xsl,base 参数设置为 null。
这之后可能会导入http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl,在这种情况下 href 参数设置为http://docbook.sourceforge.net/release /xsl/current/xhtml/docbook.xsl。但是,如果 docbook.xsl 导入了一个名为 defaults.xsl 的文件,则 href 参数也设置为 defaults.xsl 并且 base 设置为 null。
问题是 href 和 base 参数不能唯一标识资源,而且您也无法通过查看先前 href 的顺序来猜测正在请求哪个文件。是否有一些技巧可以准确找出请求文件的上下文?