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文字になる。