XMLの操作と言ったら、DOMですね。
ゼロからXMLファイルを作ることもできますね。
DOMを使って、XMLファイルを作成するサンプル
DOMを使って、XMLを作成します。
読み込んだXMLの全要素を出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class XmlWriteTest { public static void main(String[] args) { try { //Documentオブジェクトを作成 Document document = DocumentBuilderFactory.newInstance() .newDocumentBuilder() .newDocument(); //itemsタグを作成 Element rootElement = document.createElement("items"); document.appendChild(rootElement); //itemタグその1を追加 Element childElement = document.createElement("item"); childElement.setTextContent("しゃーぺん"); rootElement.appendChild(childElement); //itemタグその2を追加。さらに属性も追加。 childElement = document.createElement("item"); childElement.setTextContent("ぼーるぺん"); childElement.setAttribute("a", "aaa"); rootElement.appendChild(childElement); //XMLトランスフォーマーを作成 Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //ドキュメントからXMLを出力 DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(new File("C:\\work\\test.xml")); transformer.transform(source, result); } catch (Exception e) { e.printStackTrace(); } } } |
実行結果
こんな感じのXMLファイルが出力されます。
1 2 3 4 5 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <items> <item>しゃーぺん</item> <item a="aaa">ぼーるぺん</item> </items> |
サンプルの解説
最初のDocumentBuilderFactory#newInstance()から、DocumentBuilder#newDocument()は、Documentのオブジェクト作りです。
このDocumentがXMLのドキュメント全体に相当します。
Document#createElement()は、タグ作りです。
作ったタグは、Document#appendChild(Element)、もしくは、Element#appendChild(Element)で、タグを足します。
これを繰り返すことで、XMLのツリー構造ができあがります。
あとは、Transformer#transform(DOMSource,StreamResult)でXMLファイルを出力するだけですね。