gpt4 book ai didi

java - URIResolver、Docbook 和 XSL 转换

转载 作者:行者123 更新时间:2023-11-30 04:58:14 27 4
gpt4 key购买 nike

我正在尝试使用 Java/Xalan 以及来自 https://sourceforge.net/projects/docbook/files/docbook-xsl/1.76.1/ 的官方 Docbook XSL 文件的混合将一些 Docbook XSL 转换为 HTML以及一些提供一些自定义和覆盖的本地 xsl 文件。

我想阻止我的应用程序必须下载外部资源或访问本地文件。所以我实现了一个扩展 URIResolver 接口(interface)的类。

问题是resolve(final String href, final String base)函数没有提供足够的信息来识别正在请求的特定文件。

例如,使用 <xsl:import href="../../../xsl/html.xsl"/> 从 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 的顺序来猜测正在请求哪个文件。是否有一些技巧可以准确找出正在请求文件的上下文?

最佳答案

您创建转换的源是否有系统 ID?如果不是,这可能是您的 URI 解析器中的基数始终为 null 的原因。

如果您要从输入流创建转换,则可以手动将系统 ID 分配给源。如果需要,您可以生成一个人工 URI,并在 URI 解析器中使用该人工 URI 来映射回基本 URI。另外,请确保您在 URI 解析器中创建的源也具有系统 ID,否则从这些文件导入的资源也会出现相同的问题。

关于java - URIResolver、Docbook 和 XSL 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7800514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com