java - 尝试在java中将xslt应用于xml

标签 java xml xslt

我一直在开发一个将表格内容打印为 XML 的 Web 服务 - 我使用 WebRowSet 来执行此操作。

response.setContentType("text/xml");
WebRowSet webRowSet = new WebRowSetImpl();
webRowSet.writeXml(resultSet, response.getWriter());

(HttpServletResponse 响应)

虽然这些工作正常,但我就是不知道如何将样式表应用到 XML。我尝试使用变压器来做到这一点。

webRowSet.writeXml(resultSet, OutputStream);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource("file.xsl"));
transformer.transform(new StreamSource(InputStream), 
                      new StreamResult(response.getWriter()));

我无法理解 writeXml 中的 OutputStream 和 StreamSource 中的 InputStream 是什么。 (我不想将数据保存在文件中)

I've found a question that might be related?

如果能解释我如何解决这个问题,我将非常感激。

最佳答案

看起来您真正想要做的是从结果集中获取部分/所有字段并将其写入已知的输出格式。

根据要输出的数据的复杂性,除了使用 XSL,您还可以将结果集中的数据获取到 Java 的 Collection 对象中,并将该数据传递给 Velocity 或 FreeMarker 等模板引擎。

您的 Velocity/Freemarker 模板将(或多或少)采用您预期输出的格式,因此更容易维护。

不利的一面是,如果结果集中的数据相当丰富,您的数据结构将变得复杂,并且您需要在将数据传递到模板引擎之前创建 JavaBean 来表示数据。这将需要更多工作,但您需要在编写和维护 XSL 的工作量之间取得平衡。

关于java - 尝试在java中将xslt应用于xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11774587/

相关文章:

java - Axon 服务器命令不包含路由 key

java - Android 拉伸(stretch)布局高度,使布局占据屏幕的 50%

xml - XSLT - 使用 copy-of 似乎忽略了模板中的 "if"语句

xslt - 声明 XSL 变量时如何删除空格?

c# - XSLt.transform 给我 ""

java - 编辑距离代码中的 NZEC

java - 窗口焦点和 TextArea 文本追加

java - 如何让Android应用程序保持活力

Java : unable to marshal type "entities.Person" as an element because

java - 为什么我的 GWT Web 应用程序无法正常运行?