【问题标题】:How to convert xml string to an xml file download如何将xml字符串转换为xml文件下载
【发布时间】:2012-02-28 16:48:53
【问题描述】:

我的控制器中有一个方法,如下所示:

@RequestMapping(value = "/test", method = RequestMethod.GET)
public @ResponseBody String getNameAsXML(HttpServletRequest httpRequest, @RequestParam("name") String name)
{
    ... some logic goes here to get the data from the db 
     by name and convert it to valid xml string
    ...
        return xmlString;
}

xmlString 是我要返回的 xml 的字符串表示形式。

当我运行这个方法时,我可以在浏览器中看到 xml,但是我想给用户一个下载弹出窗口,允许他将其作为 xml 文件下载,而不是在浏览器中显示。

我考虑过返回 MultipartFile 而不是 String,但不太确定该怎么做。

【问题讨论】:

标签: xml spring spring-mvc


【解决方案1】:

这可以通过将响应头中的“Content-Disposition”设置为“attachment=”来实现。最好将响应类型设置为正确的 MIME 类型(“text/xml”)。不过,这可能已经自动完成了。

【讨论】:

  • 我也面临同样的情况,我的意思是,我可以在浏览器中看到 xml,但只能看到值(没有相应的 xml 标签)。我可以在浏览器的页面源代码中看到整个 xml。使用 response.setHeader("Content-Disposition", "attachment=");我需要在我的类路径中有任何文件还是必须将 xml 字符串的内容写入该文件???
  • 附件的值只是告诉浏览器最初将文件保存为什么。听起来您需要指定正确的 MIME 类型,以便浏览器呈现 XML 文档,而不是将其解析为 HTML。
  • 请以任何方式纠正我的错误。我发布了我的代码的快照。 public @ResponseBody String getVMdata(...) { ... .. HttpEntity resEnity = response.getEntity(); content = EntityUtils.toString(resEnity); response.setHeader("Content-Type", "application/xml"); response.setHeader("Content-Disposition", "attachment="); return content; }。 content 的值格式为<xml>...</xml>
  • 我从 xml 字符串创建了一个 dom 树。我将它存储到本地文件夹,现在我试图将该文件作为附件添加到响应中,但无法在我的浏览器中找到任何链接。请查看@Blaze-Core 的评论部分以获得更清晰的信息。
【解决方案2】:

您可以在java中从字符串创建xml文件,如下所示:

 public static void main(String[] args) {  
        String xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"></soap:Envelope>";  

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  

        DocumentBuilder builder;  
        try  
        {  
            builder = factory.newDocumentBuilder();  

            // Use String reader  
            Document document = builder.parse( new InputSource(  
                    new StringReader( xmlString ) ) );  

            TransformerFactory tranFactory = TransformerFactory.newInstance();  
            Transformer aTransformer = tranFactory.newTransformer();  
            Source src = new DOMSource( document );  
            Result dest = new StreamResult( new File( "xmlFileName.xml" ) );  
            aTransformer.transform( src, dest );  
        } catch (Exception e)  
        {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  

然后提供该文件的链接,以便用户下载。

参考http://www.coderanch.com/t/512978/java/java/convert-string-xml-file-java

也可以参考http://www.java.happycodings.com/XML/code17.html

【讨论】:

  • 我按照您的说明从 xml 字符串创建 dom,这是一个快照。 public @ResponseBody String getVMdata(...) { ... .. HttpEntity resEnity = response.getEntity(); content = EntityUtils.toString(resEnity . . . Result dest = new StreamResult(new File("C:\\sample1.xml")); aTransformer.transform(src, dest); response.setHeader("Content-Type", "application/xml"); response.setHeader("Content-Disposition", "attachment;filename=C:\\sample1.xml); return content }。但是我在浏览器中看不到任何链接。我的编码有什么问题???
【解决方案3】:

我最终在上面的 Controller 方法中添加了response.setHeader("Content-Disposition", "attachment; filename=test.xml");,它工作正常。

我对这个解决方案不是 100% 满意,因为我一直在寻找更多 Spring 可配置的东西,而不是侵入响应对象,所以如果有人有更好的想法,请分享。

感谢您的上述回复,但我认为他们和我的一样 hack :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 2011-04-22
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多