【问题标题】:How to 'transform' a String object (containing XML) to an element on an existing JSP page如何将字符串对象(包含 XML)“转换”为现有 JSP 页面上的元素
【发布时间】: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 页面中的一个元素。我只是不知道如何实现这一点,即使看过上面的代码。

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

【问题讨论】:

    标签: java xml xslt


    【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 2017-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-03
        • 2012-07-11
        • 2011-03-12
        相关资源
        最近更新 更多