「Java」XML 操作してみた(DOM)
Java で XML の操作してみたので、その時のメモ。
今回は DOM を使用して XML ファイル読み込むって内容をやりました。
[ 参考ページ ]
・Javaで実現するDOM/SAXプログラミング(2):初めてJavaでXML文書を操作してみる (1/3) - @IT
http://www.atmarkit.co.jp/ait/articles/0102/10/news003.html
※ オラクルのドキュメント的は以下あたりっぽいですが、今回は上記の Web ページを参考にさせていただきました ( ドキュメントは後日しっかり読もう・・・ )。
・Lesson: Document Object Model (The Java"! Tutorials > Java API for XML Processing (JAXP))
http://docs.oracle.com/javase/tutorial/jaxp/dom/index.html
操作対象の XML ファイルは以下の内容とした。
■ input.xml
<?xml version="1.0" encoding="UTF-8"?> <node attr1="0001"> <node1> <node11>hoge</node11> <node12>uga</node12> </node1> <node2>oro</node2> <node3>ahe</node3> </node>
上記の XML ファイルに対して、いろいろ遊んでみました。
かなりセンスが感じられないコードになってますが、特に目的なく "遊んだ" ということで・・・
■ XMLDOMTest.java
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class XMLDOMTest { public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder document = factory.newDocumentBuilder(); FileInputStream fis = new FileInputStream("input.xml"); Node root = document.parse(fis); // <node> の情報 Node node = root.getFirstChild(); System.out.println(node.getNodeName()); System.out.println(node.getAttributes().getNamedItem("attr1")); // <node1> の情報 Node node1 = node.getFirstChild().getNextSibling(); System.out.println(node1.getNodeName()); // <node11> <node12> の情報 NodeList node1112 = node1.getChildNodes(); System.out.println(node1112.item(1).getNodeName() + ":" + node1112.item(1).getFirstChild().getNodeValue()); System.out.println(node1112.item(3).getNodeName() + ":" + node1112.item(3).getFirstChild().getNodeValue()); // <node2> の情報 Node node2 = node1.getNextSibling().getNextSibling(); System.out.println(node2.getNodeName() + ":" + node2.getFirstChild().getNodeValue()); // <node3> の情報 Node node3 = node2.getNextSibling().getNextSibling(); System.out.println(node3.getNodeName() + ":" + node3.getFirstChild().getNodeValue()); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } } }
■ 出力結果
node attr1="0001" node1 node11:hoge node12:uga node2:oro node3:ahe
個人的には、次のコードで得られる出力が感覚的にわかりにくいなぁと思った ( [ 参考ページ ] の図1がなかったら調べるの時間がかかったぽい )。
- 略 - NodeList nodelist = node.getChildNodes(); for (int i = 0; i < nodelist.getLength(); i++) { Node n = nodelist.item(i); System.out.println(n.getNodeName()); } - 略 -
■ 出力結果
#text node1 #text node2 #text node3 #text
次は SAX 使った操作もやってみたいですが、DOM に関してもまだまだ勉強が必要そうです。
以上です。