如何将字符串对象(包含 XML)“转换”为现有 JSP 页面上的元素

Posted

技术标签:

【中文标题】如何将字符串对象(包含 XML)“转换”为现有 JSP 页面上的元素【英文标题】:How to 'transform' a String object (containing XML) to an element on an existing JSP page 【发布时间】:2010-10-25 12:25:42 【问题描述】:

目前,我有一个包含 XML 元素的 String 对象:

String carsInGarage = garage.getCars();

我现在想将此字符串作为输入/流源(或某种源)传递,但不确定选择哪一个以及如何实现它。

我看过的大多数解决方案都导入包:javax.xml.transform 并接受 XML 文件 (stylerXML.xml) 并输出到 html 文件 (outputFile.html)(参见下面的代码)。

try 

    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer(new StreamSource("styler.xsl"));

    transformer.transform(new StreamSource("stylerXML.xml"), new StreamResult(new FileOutputStream("outputFile.html")));

catch (Exception e)

    e.printStackTrace();

我想接受一个字符串对象并输出(使用 XSL)到现有 JSP 页面中的一个元素。我只是不知道如何实现这一点,即使看过上面的代码。

有人可以提供建议/帮助吗?我一直在寻找解决方案,但我就是无法拿出任何东西。

【问题讨论】:

【参考方案1】:

使用StringReaderStringWriter

try 
    StringReader reader = new StringReader("<xml>blabla</xml>");
    StringWriter writer = new StringWriter();
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer(
            new javax.xml.transform.stream.StreamSource("styler.xsl"));

    transformer.transform(
            new javax.xml.transform.stream.StreamSource(reader), 
            new javax.xml.transform.stream.StreamResult(writer));

    String result = writer.toString();
 catch (Exception e) 
    e.printStackTrace();

【讨论】:

嗨,布鲁诺,感谢您的出色回答。它现在正在正确编译:) 但是,我仍然无法将其打印到屏幕上。我目前正在尝试:out.println(writer);但这失败了。 可能是转换出错了……到底是怎么失败的? 它失败了,因为浏览器没有打印任何内容。在我的尝试块的底部,我有: String result = writer.toString(); out.print("" + 结果 + "");我还刚刚安装了一个名为 Firebug 的工具来检查我的 HTML 正文的内容。什么都没有了。 我不知道这是否与它有关,但我可以 out.print() TRY 块之外的随机字符串。但是当它在 TRY 块内时,我不能 out.print() 相同的随机字符串。 嗨,布鲁诺,我已经设法将转换/样式化的 XML 输出显示到屏幕上。我必须感谢你的帮助。你太棒了 :) 我确实还有一个问题 :P 你是否期望原始字符串以及转换/样式化的 XML 一起输出?还是您只是期望转换/样式仅显示?【参考方案2】:

如果在某些时候您希望源包含的不仅仅是单个字符串,或者您不想手动生成 XML 包装器元素,请创建一个包含您的源的 DOM 文档并使用DOMSource.

【讨论】:

【参考方案3】:

这对我有用。

String str = "<my>xml</my>"    
StreamSource src = new StreamSource(new StringReader(str));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Result res = new StreamResult(baos);
transformer.transform(src, res);

【讨论】:

以上是关于如何将字符串对象(包含 XML)“转换”为现有 JSP 页面上的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使用c#将xml字符串转换为对象

当节点包含值时,使用 JAXB 将 XML 转换为对象

我需要将 XML 字符串转换为 XmlElement

如何将包含月份名称的字符串数据和时间转换为 Java 中的 Date 对象?

如何将包含逗号分隔的 json 值的单个字符串转换为单个 json 对象?

如何将转换字符串写入文档对象