2

人のデータを保持するオブジェクトがあります。ユーザーがダウンロード ボタンをクリックすると、(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();
}

ありがとう。

4

2 に答える 2

4

あなたはあなたに書く必要があります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);

編集 :

OK、あなたが求めていることは、あなたが提供したリンクにあるものからそれほど遠くありませStringWriterFile.

これは次の方法で実現できます。

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"));

これについてまだ不明な点がある場合は教えてください。

于 2013-06-27T18:15:14.063 に答える