将文档作为参数传递给 Java 中的 XSL Translation

2023-11-26

我正在为我的 XSL 添加国际化功能。我见过很多创建dictionary.xml 文件并通过document('dictionary.xml') 将其加载到我的XSL 中的示例。我想做类似的事情,但我不想在磁盘上创建和存储dictionary.xml 文件,我宁愿在服务器启动时从SQL 构建它,并将Document 对象保留在Java 的内存中。然后我想将字典文档作为参数传递给转换器,以便我的 XSL 翻译函数可以使用它。但是,它似乎不起作用。

相关Java代码:

Document dictionary = TranslationDictionary.getDictionaryDocument();
transformer.setParameter("dictionary", dictionary);

词典文档内容:

<dictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <translatedString dictionaryId="BASIC_DETAILS">
        <language id="es" value="Detalles B&#225;sicos"/>
    </translatedString >
    <translatedString dictionaryId="VEHICLE_INFORMATION">
        <language id="es" value="Informaci&#243;n del Veh&#237;culo"/>
    </translatedString >
    <translatedString dictionaryId="STRUCTURE">
        <language id="es" value="Estructura"/>
    </translatedString >
    <translatedString dictionaryId="DRIVER_INFORMATION">
        <language id="es" value="Informaci&#243;n del Conductor"/>
    </translatedString >
    <translatedString dictionaryId="MAINTENANCE_AND_FEUL">
        <language id="es" value="Mantenimiento &amp; Combustible"/>
    </translatedString >
    <translatedString dictionaryId="PURCHASING">
        <language id="es" value="Compra"/>
    </translatedString >
</dictionary>

XSL 文件:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://www.test.com">
    <xsl:param name="dictionary"/>
    <xsl:param name="language" select="'es'"/>


<xsl:template match="/">
<xsl:message>
    <xsl:copy-of select="$dictionary/dictionary/translatedString[@dictionaryId='BASIC_DETAILS']/language[@id='es']/@value"/>
</xsl:message>

</xsl:template>

但我什么也没得到。我尝试只复制 $document/document 来确认我没有遇到 xpath 问题,但事实并非如此,因为这给了我一份完整文档的副本。就好像 XSL 将 $dictionary 视为字符串而不是节点。有什么线索吗?


Use a URIResolver而不是参数。首先,像这样创建解析器:

public class DocURIResolver implements URIResolver {

    final Map<String, Document> documents;

    public DocURIResolver(final Map<String, Document> documents) {
        this.documents = documents;
    }

    public Source resolve(final String href, final String base) {
        final Document doc = documents.get(href);
        return (doc != null) ? new DOMSource(doc) : null;
    }
}

像这样使用它:

Document dictionary = TranslationDictionary.getDictionaryDocument();
Map<String, Document> docs = new HashMap<String, Document>();
docs.put("dictionary", dictionary);
// transformer is your javax.xml.transform.Transformer
transformer.setURIResolver(new DocURIResolver(docs));

并按名称在样式表中引用它:

<xsl:variable name="dict" select="document('dictionary')"/>

当然,这只是一个玩具示例。你可以让你的URIResolver功能齐全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文档作为参数传递给 Java 中的 XSL Translation 的相关文章

随机推荐

  • 什么是排序算法的稳定性以及为什么它很重要?

    我很好奇 为什么稳定性在排序算法中重要或不重要 排序算法据说是stable如果具有相同键的两个对象在排序输出中出现的顺序与它们在要排序的输入数组中出现的顺序相同 有些排序算法本质上是稳定的 如插入排序 合并排序 冒泡排序等 而有些排序算法则
  • IE9 的 Flexbox 替代方案

    我最初使用 Chrome 开发了一个网站 最容易设计 但现在正在转向 IE 支持模型 话虽这么说 我从 IE11 开始 并对 IE 和 Chrome 之间的奇怪差异进行了必要的更改 但现在我要放弃 IE 版本了 我能够使用 IE10 的 C
  • 如何禁用 .NET WebBrowser 控件中的缓存?

    我已经在谷歌上搜索了几个小时并试图弄清楚这一点 但我就是做不到 我在表单上有 1 个 webbrowser 控件 webbrowser1 一旦我加载一个页面 比如 google com 如果我使用webbrowser1 refresh or
  • SFTP:返回远程目录中的文件数量?

    我通过 SFTP 将一批文件发送到远程服务器 如果它是本地目录我可以做这样的事情ls l wc l获取文件总数 但是 使用 SFTP 时 我收到错误Can t ls not found echo ls l sftp server grep
  • 将嵌入式 Python IO 重定向到使用 AllocConsole 创建的控制台

    我在将 Python IO 重定向到为 Win32 应用程序分配的控制台时遇到一些问题 是否有我需要重定向的特定于 Python 的流 这或多或少是我现在正在做的事情 删除了错误检查等 int stdcall WinMain Usual s
  • 使用 LINQ 的动态表达式。如何找到厨房?

    我尝试实现一个用户动态过滤器 其中使用选择一些属性 选择一些运算符并选择值 因为我还没有找到答案这个问题 我尝试使用LINQ表达式 主要是我需要识别所有主要房间是厨房的房屋 任何感觉 我知道 using System using Syste
  • 教义自动创建所有数据库表?

    有没有办法告诉学说自动创建模式表而不使用此命令 doctrine schema update force 使用 SchemaTool 和 EntityManager 您可以执行以下操作 schemaTool new Doctrine ORM
  • 如何将可观察集转换为可观察列表

    我正在尝试将项目设置为表视图 但 setitems 方法需要一个可观察列表 而我的模型中有一个可观察集 FXCollections 实用程序类没有用于在给定可观察集的情况下创建可观察列表的方法 我尝试进行强制转换 但这导致了类强制转换异常
  • 如何从另一个java包读取文件(例如txt文件)而不指定绝对路径?

    我已将非 java 文件存储在包中 我想从此包中读取文件 而不指定文件的绝对路径 例如 C etc etc 我该怎么做 Use 获取资源作为流 例如 MyClass class getResourceAsStream file txt 即将
  • 对于 Windows 2008 Server IIS 7 和 7.5 中的 asp.net webapi,PUT 和 DELETE 返回 404

    我遇到500内部服务器错误 when PUT DELETE与 Windows 2008 服务器 IIS 我得到的回应是 div h1 Server Error h1 div div div
  • Android 使用 Smack 添加好友

    我对使用 smack 库和制作一个聊天应用程序很陌生 我已经弥补了很多 在这一步我想问两个问题 当我添加朋友时 朋友已添加到我的列表中 但没有任何通知发送给我添加的朋友 如何实现相同的效果 我添加了下面的代码 我想问的第二件事是 如何检查我
  • 使用 ASP 重复器创建 HTML 表,水平重复

    我正在尝试使用 ASP 转发器构建 HTML 表
  • PyInstaller .exe 文件不执行任何操作

    3天后 我无法将python程序打包成 exe文件 我尝试过 py2exe 它不断错过模块 和 PyInstaller 这是复杂的部分 我的程序使用了很多额外安装的模块 coopr pyomo openpyxl glpk cbc pyuti
  • Perl:linux 源代码中的 checkstack.pl 有何作用?

    我正在 Linux 内核中做一个项目 我想知道这个 checkstack pl 是做什么的 我从来没有学过perl所以无法理解这个程序 如果我能从概念上理解该程序 如果不是逐行 那就太好了 任何努力表示赞赏 Source 链接文本 假设我想
  • iOS 6 - UIActivityViewController 项目[重复]

    这个问题在这里已经有答案了 希望大家都知道 iOS 6 包含新风格ActionSheet UIActivityViewController The UIActivityViewController可以使用字符串 url 图像等参数启动 下面
  • NULL 是如何存储在数据库中的?

    我很想知道 NULL 是如何存储到数据库中的 它肯定取决于数据库服务器 但我想对此有一个总体了解 第一次尝试 假设服务器将未定义的值 可以是任何值 放入 NULL 值字段中 你能很幸运并用以下命令检索 NULL 值吗 WHERE field
  • 带有 Auth0 的 Angular2,我需要隐藏我的 ClientID 和域吗?

    我一直在使用Auth0构建我的网站的前端用户身份验证部分 但不确定我是否应该完全遵循文档 如果我想构建一个商业产品 我应该隐藏客户端 ID 和域吗 这会导致安全漏洞吗 目前任何人都可以查看我的 Angular2 源代码并查看客户端 ID 和
  • newSpellCheckerSession 始终返回 null

    我正在尝试连接我的 Note 平板电脑上内置的 Android 拼写检查服务 当我打电话时 final TextServicesManager tsm TextServicesManager getSystemService Context
  • 更改图像的特定区域并填充该区域的颜色

    编辑 Png 图像 例如 更改特定区域并填充该区域的颜色 我想仅更改选定区域的图像颜色 就像第一个用户选择颜色然后选择图像一样 之后他可以用所选颜色更改图像颜色的特定区域 之后他也可以保存该图像这可能吗 像Color公司的网站就用这种东西
  • 将文档作为参数传递给 Java 中的 XSL Translation

    我正在为我的 XSL 添加国际化功能 我见过很多创建dictionary xml 文件并通过document dictionary xml 将其加载到我的XSL 中的示例 我想做类似的事情 但我不想在磁盘上创建和存储dictionary x