Java

【Java】XML文字列を気軽に生成するメソッド

More than 1 year has passed since last update.

XMLのDOM要素を構築し、それを文字列に変換することを気軽に行えるようにする。以下のように書けることが理想。

// インポート宣言

import org.w3c.dom.Document;
import org.w3c.dom.Element;

// ここから処理
Document document = createXMLDocument("book");
Element root = document.getDocumentElement();

// DOM要素の構築
Element info = document.createElement("info");
info.setAttribute("title", "Java入門");
info.setAttribute("author", "shunya");
info.setAttribute("date", "2016/06/27");
info.setAttribute("version", "1.0");
root.appendChild(info);

// XML文字列として標準出力に出力
System.out.println(createXMLString(document));

//=> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
//=> <book>
//=> <info author="shunya" date="2016/06/27" title="Java入門" version="1.0"/>
//=> </book>

createXMLDocumentメソッドとcreateXMLStringメソッドを定義する必要があるので、以下のように定義する。

// インポート宣言

import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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.DOMImplementation;
import org.w3c.dom.Document;

// メソッド定義
public Document createXMLDocument(String root) throws ParserConfigurationException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

DOMImplementation dom = builder.getDOMImplementation();
return dom.createDocument("", root, null);
}

// メソッド定義
public String createXMLString(Document document) throws TransformerException {
StringWriter writer = new StringWriter();
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "2");

transformer.transform(new DOMSource(document), new StreamResult(writer));
return writer.toString();
}


  • Eclipseであれば、ビルドパスにJARファイルを追加したり、プラグインを入れたりする必要はない。


  • Transformer#setOutputProperty()は、出力するXML文字列の細かな設定を行う。{http://xml.apache.org/xalan}indent-amountプロパティの値を2にすると、インデントが半角空白文字2文字になる。