Đôi khi khi lập trình bằng Java, chúng ta nhận được một chuỗi (String) thực chất là một XML và để xử lý nó, chúng ta cần chuyển đổi nó sang XML Document (org.w3c.dom.Document
). Ngoài ra, với mục đích debug hoặc gửi đến một hàm khác, chúng ta có thể cần chuyển đổi đối tượng Document sang String.
Bài viết này sẽ hướng dẫn bạn cách chuyển đổi chuỗi thành XML và XML sang chuỗi trong Java.
Chuyển đổi chuỗi thành XML
Dưới đây tôi đề cập đến hai hàm tiện ích.
Document convertStringToDocument(String xmlStr)
: Phương thức này sẽ nhận đầu vào làString
và sau đó chuyển đổi nó sang DOM Document và trả về. Chúng ta sẽ sử dụng InputSource và StringReader cho việc chuyển đổi này.String convertDocumentToString(Document doc)
: Phương thức này sẽ nhận đầu vào là Document và chuyển đổi nó sang String. Chúng ta sẽ sử dụng Transformer, StringWriter và StreamResult cho việc chuyển đổi này.
package com.journaldev.xml;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
public class StringToDocumentToString {
public static void main(String[] args) {
final String xmlStr = "<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" standalone=\\"yes\\"?>\\n"+
"<Emp id=\\"1\\"><name>Pankaj</name><age>25</age>\\n"+
"<role>Developer</role><gen>Male</gen></Emp>";
Document doc = convertStringToDocument(xmlStr);
String str = convertDocumentToString(doc);
System.out.println(str);
}
private static String convertDocumentToString(Document doc) {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer;
try {
transformer = tf.newTransformer();
// below code to remove XML declaration
// transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
String output = writer.getBuffer().toString();
return output;
} catch (TransformerException e) {
e.printStackTrace();
}
return null;
}
private static Document convertStringToDocument(String xmlStr) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try
{
builder = factory.newDocumentBuilder();
Document doc = builder.parse( new InputSource( new StringReader( xmlStr ) ) );
return doc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được cùng một đầu ra String
mà chúng ta đã sử dụng để tạo DOM Document.
<?xml version="1.0" encoding="UTF-8"?><Emp id="1"><name>Pankaj</name><age>25</age>
<role>Developer</role><gen>Male</gen></Emp>
Bạn có thể sử dụng replaceAll("\\n|\\r", "")
để loại bỏ các ký tự xuống dòng khỏi String
và đưa nó về định dạng nhỏ gọn.