この記事は約5分で読めます。
こんにちは、すずしんです。
XMLは、データをシンプルに扱うためのデータ構造です。
非常に使い勝手が良く、Webなどの世界ではよく利用されます。
そのXMLを、Javaで扱う方法について今回は書いてみようと思います。
具体的には、XMLをDOMで読み込んで内容を取得する方法を扱います。
スポンサーリンク
DOMとは?
DOMというのは、XMLを扱うためのAPI仕様の事をいいます。
この仕様では、XMLによって書かれた文書全体をドキュメントと呼びます。
ドキュメントはノードから構成されるノードツリーとなっています。
ドキュメントの取得方法(Java)
Javaでドキュメントを取得するには、主に3つのステップがあります。
ステップ1: DocumentBuilderFactoryクラスのnewInstance()メソッドを使用します。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
ステップ2: DocumentBuiderFactoryのインスタンスからnewDocumentBuilder()メソッドを呼び出します。
DocumentBuilder builder = factory.newDocumentBuilder();
ステップ3: DocumentBuilderのインスタンスからparse()メソッドを呼び出します。
Document document = builder.parse("sample.xml");
ドキュメントの操作方法
ドキュメントを操作するには、まずgetDocumentElement()メソッドでElementノードを取得します。
このElementノードに対して操作メソッドを使います。
Element root = document.getDocumentElement();
その後は、NodeやElementに対する操作が多くなりますが…。
これらで使用できるメソッド群についての詳細はAPIを参照してください。
Node (Java Platform SE 7 )
Element (Java Platform SE 7 )
今回の例で使用するのは、主に以下のメソッドです。
Node String getNodeName(): ノード名を取得。 NodeList getChildNodes(): このノードの子をすべて含むNodeListを取得。 Element String getAttribute(String name): 属性を取得。 NodeList int getLength(): リスト内のノード数を取得。 Node item(int index): リスト内のindex番目の項目を取得。
DOMでXMLを扱うサンプルプログラム
このサンプルで扱うXMLは以下のようになっています。
友達リストのような形です。
これをpersons.xmlとして保存してあります。
<?xml version="1.0" encoding="utf-8" ?> <persons name="friends"> <person name="Asakura"> <gender>Male</gender> <age>20</age> <interest>Game</interest> </person> <person name="Kikuchi"> <gender>Male</gender> <age>23</age> <interest>Tennis</interest> </person> <person name="Suzuki"> <gender>Female</gender> <age>19</age> <interest>Baseball</interest> </person> </persons>
persons.xmlの内容を取得して、コンソールに取得するサンプルプログラムは以下のようになります。
ここではXMLReaderクラスとしてみました。
package jp.suzushin7.sample; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XMLReader { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("persons.xml"); Element root = document.getDocumentElement(); System.out.println("Node: " + root.getNodeName()); System.out.println("name: " + root.getAttribute("name")); System.out.println("=============================="); NodeList personsNodeList = root.getChildNodes(); for(int i = 0; i < personsNodeList.getLength(); i++) { Node personNode = personsNodeList.item(i); if(personNode.getNodeType() == Node.ELEMENT_NODE) { Element personElement = (Element)personNode; if(personElement.getNodeName().equals("person")) { System.out.println("[" + personElement.getAttribute("name") + "]"); NodeList personChildrenNodeList = personElement.getChildNodes(); for(int j = 0; j < personChildrenNodeList.getLength(); j++) { Node node = personChildrenNodeList.item(j); if(node.getNodeType() == Node.ELEMENT_NODE) { System.out.println(node.getNodeName() + ": " + node.getTextContent()); } } } } } System.out.println("=============================="); } }
実行結果
上記サンプルプログラムを実行すると、以下のような結果が得られます。
確かに、persons.xmlの内容が正しく取得できているのが分かりますね。
Node: persons name: friends ============================== [Asakura] gender: Male age: 20 interest: Game [Kikuchi] gender: Male age: 23 interest: Tennis [Suzuki] gender: Female age: 19 interest: Baseball ==============================
ひとこと
今回の記事では、JavaでDOMを使ってXMLを扱う方法について書いてみました。
やり方が分かってしまえば、それほど難しいというわけでもなさそうですね。
今回のサンプルプログラムは、XMLの内容を表示するだけの非常にシンプルなものでしたが…。
XMLを扱えるようになると、もっと色々な応用ができると思います。
ぜひ工夫して便利なプログラムを作成してみてくださいね。