2013-06-27 126 views
1

我有一个持有人的数据的对象。当用户点击下载按钮时,xml需要由(person.dataitems)创建,之后用户可以选择下载文件(如保存文件或打开文件)如何在没有中间文件存储的情况下下载XML文档?

我已经写下了下面的代码它在点击按钮时创建一个xml文件,但该文件保持空白。我想知道如何将数据写入此文件然后下载。

response.setHeader("Content-Disposition", "attachment;filename="+patient.getGivenName()+".xml"); 
try { 
    StringWriter r = new StringWriter(); 
    String ccdDoc = r.toString(); 
    ccdDoc = ccdDoc.replaceAll("&lt;", "<"); 
    ccdDoc = ccdDoc.replaceAll("&quot;", "\""); 
    byte[] res = ccdDoc.getBytes(Charset.forName("UTF-8")); 
    response.setCharacterEncoding("UTF-8"); 
    response.getOutputStream().write(res); 
    response.flushBuffer(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

谢谢。

+1

你从不在你的'StringWriter'中放入任何东西。 –

+0

@ user1882758可能是您应该重新标题您的问题:更类似于:'如何使XML文档可下载没有中间文件存储'...只是一个建议;) –

回答

2

你必须写到您的StringWriter

import java.io.*; 

public class StringWriterDemo { 

    public static void main(String[] args) { 

     String s = "Hello World"; 

     // create a new writer 
     StringWriter sw = new StringWriter(); 

     // write portions of strings 
     sw.write(s, 0, 4); 
     sw.write(s, 5, 6); 
     // write full string 
     sw.write(s); 

     // print result by converting to string 
     System.out.println("" + sw.toString()); 


    } 
} 

不要做:

String ccdDoc = r.toString(); 

它不仅创造了r字符串的副本。然后,您正在修改副本,但不包含StringWriter的所有内容。

务必:

r.write("some content"); 

和访问由作家将包含字符串,这样做:

String a_string = r.toString(); 
response.getOutputStream().write(a_string); 

编辑:

好了,你问与您提供的链接中的内容相距甚远,除了您必须写入StringWriter而不是File

这是可以实现这种方式:

1)不要建立一个XML文档:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

// root elements 
Document doc = docBuilder.newDocument(); 
Element rootElement = doc.createElement("company"); 
doc.appendChild(rootElement); 

// staff elements 
Element staff = doc.createElement("Staff"); 
rootElement.appendChild(staff); 

// set attribute to staff element 
staff.setAttribute("id", "1"); 

// firstname elements 
Element firstname = doc.createElement("firstname"); 
firstname.appendChild(doc.createTextNode("yong")); 
staff.appendChild(firstname); 

: 
: 

// Then write the doc into a StringWriter 

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 

//initialize StreamResult with StringWriter object to save to string 
StreamResult result = new StreamResult(new StringWriter()); 
DOMSource source = new DOMSource(doc); 
transformer.transform(source, result); 

String xmlString = result.getWriter().toString(); 
System.out.println(xmlString); 

// Finally, send the response 

byte[] res = xmlString.getBytes(Charset.forName("UTF-8")); 
response.setCharacterEncoding("UTF-8"); 
response.getOutputStream().write(res); 
response.flushBuffer(); 


这里的关键是要做到:

StreamResult result = new StreamResult(new StringWriter()); 

代替作者:

StreamResult result = new StreamResult(new File("C:\\file.xml")); 

你告诉我,如果还有什么不清楚的话。

+0

我想写入一个XML文件,所以我如何使用StringWriter将元素添加到XML文件中。我经历了这个例子:http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/ 但是,这是直接将文件保存在位置。我想提供一个下载选项。 – user1882758

+0

@ user1882758我更新了我的答案。试试看,并告诉我它是如何工作的) –

+1

它的工作!谢谢! – user1882758

相关问题