gpt4 book ai didi

java - 从数据库导入 xslt

转载 作者:行者123 更新时间:2023-11-30 03:12:41 25 4
gpt4 key购买 nike

我将 xslt 存储在数据库中。我想从另一个也存储在数据库中的 xslt 调用模板。使用下面的示例代码,我能够正确运行 xslt(考虑 xsltOneStr 是通过 dao 层来自数据库的 xslt 字符串,因此 xmlStr 是要解析的 xml)

但是,如果我在 xsltOne.xsl 中使用,它显然会提示,因为源 xsltOne.xsl 来自数据库,而调用的 xsltTwo.xsl 也在数据库中。显然,在我的例子中使用 import 在逻辑上是不正确的,因为我没有使用文件系统来获取 xsl,而是使用来自数据库的字符流,但为了进行对话,我使用了 import 标记。

所以问题是,由于 xsl 来自数据库,我应该使用什么来代替 xsl:import。我正在使用 Java & xslt 能够调用 java 方法。有什么方法可以使用java方法来调用驻留在db(xsltTwo.xsl)中的第二个xslt。如果整个 xsltTwo.xsl 不能通过 java 方法调用,我至少可以在 xsltOne.xsl 中即时插入一个在 xsltTwo 中声明的模板

例如,我们可以使用 java as 调用 java 方法为 xsl 参数赋值

同样,我们可以分配整个模板或使用 java 方法从另一个 xslt 调用一个 xslt 吗?

        Source xsltOne=new StreamSource(new StringReader(xsltOneStr));
Source xml =new StreamSource(new StringReader(xmlStr));

TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(xsltOne);

StringWriter writer = new StringWriter();
transformer.transform(xml, new StreamResult(writer));

最佳答案

您可以通过提供URIResolver :

TransformerFactory factory = TransformerFactory.newInstance();
factory.setURIResolver(new MyURIResolver());
Transformer transformer = factory.newTransformer(xsltOne);

现在,当工厂遇到 xsl:import 指令时,您的 URIResolver 会收到通知,为导入的样式表提供Source。因此,您只需要提供一个 URIResolver,它从数据库加载导入的样式表并将其作为 Source 对象返回。

关于java - 从数据库导入 xslt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33288938/

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