【问题标题】:Take an XML file and an XSL file and make an HTML string out of them?获取一个 XML 文件和一个 XSL 文件并从中生成一个 HTML 字符串?
【发布时间】:2011-10-13 13:53:33
【问题描述】:

我有 2 个字符串,一个使用 Java DOM 接口构造的 XML 字符串,以及一个我想绑定到该 XML 文件的外部 XSL 文件。我尝试使用 Java 转换方法,但没有运气(这意味着我似乎无法在网络上找到任何解决方案)。

如何获取 XML 文件和 XSL 文件并从中生成 HTML 字符串?

我正在尝试将一个 XML 页面注入到我的 JSP 页面中。

澄清一下: 这是在 servlet 中完成的,而不是在 JavaScript 中。

更多信息:

我在运行时将 XML 创建为字符串,我得到的 XSL 文件存储在服务器上,我想做的是在用户单击某个特定位置时将 XSL 文件更改的 XML 显示给用户网站上的链接,我想将其嵌入到现有的 JSP 页面中(以保持网站的标准外观)。

这是我目前得到的:

String convertedXML = new String();
TransformerFactory factory1 = 
    TransformerFactory.newInstance();
Source xsl = new StreamSource("my.xsl");
Result result11 = null;
try {
    Templates template = factory1.newTemplates(xsl);
    Transformer transformer1 = template.newTransformer();
    Source xml = new StreamSource(xmlString);
    result11 = new StreamResult(convertedXML);
    transformer1.transform(xml, result11);
} catch(Exception e) {
   System.out.println("Not Good");
}

catch 前的最后一行抛出下一个错误:

javax.xml.transform.TransformerException:
java.io.FileNotFoundException:在 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(未知 来源)在 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(未知 来源)在 controllers.UserController.schedulePage(UserController.java:394)

【问题讨论】:

  • 那么你只是想将两个文件的内容加载到字符串中吗?这与 XML/XSLT/HTML 有什么关系?您是什么意思将 XSL 文件“绑定”到 XML 文件? “没有运气”是什么意思 - 你有一个错误?你得到错误的结果?你的 Java 代码是什么样的?
  • 究竟是什么不工作?是否有任何错误信息?异常处理肯定会发出比“不好”更有用的东西吗?
  • 源(Source xsl)和结果似乎不包含文件/字符串内容
  • @nayish:这好多了...现在您的代码目前在做什么?它会抛出异常并打印“不好”吗?如果是这样,让它打印出实际的异常。有什么例外?
  • 什么是xmlString?如果在构造 StreamSource 时提供字符串参数,则该字符串应该是 URL。

标签: java html xml xslt servlets


【解决方案1】:

你能不能把你的文件放到WEB-INF中并尝试使用以下内容:

String path = "/WEB-INF/my.xsl";
ServletContext context = getServletContext();
InputStream xslIs = context.getResourceAsStream(filename);
Source xsl = new StreamSource(xslIs);

【讨论】:

    【解决方案2】:

    我不知道您是否已经得到答案,但提供的代码(如上面的 mzjn 所示)显然不正确,因为提供给 StreamSource 的参数是系统标识符(文件定位器) 或文件,而不是将被覆盖的字符串。如果要将输出写入字符串,请使用以下构造:

    StringWriter writer = new StringWriter();
    result11 = new StreamResult(writer);
    // do your transform...
    transformer1.transform(xml, result11);
    // now obtain your result's output...
    String out = writer.toString();
    

    希望对您有所帮助。

    【讨论】:

    • 好久没碰这个了,不过我很确定当时选择的答案对我来说已经足够好了……
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2016-02-25
    相关资源
    最近更新 更多