LoginSignup
15
12

More than 5 years have passed since last update.

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

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12