Java Tips – DOM – XMLドキュメントのルート要素の子要素(複数)の情報を取得するには
DOM(Document Object Model)を使用して、XMLドキュメントのルート要素の子要素(複数)の情報を取得する手順は以下の通りです。
- 最初の要素をNodeクラスのgetFirstChildメソッドで取得します。
- 次の要素はNodeクラスのgetNextSiblingメソッドで取得します。
パース処理するXMLドキュメントは以下の通りです。
<?xml version="1.0" encoding="UTF-8"?> <root> <child1/> <child2/> <child3/> <child4/> <child5/> </root>
package net.tk_factory.example.xml.dom; import java.io.IOException; import org.apache.log4j.Logger; import org.apache.xerces.parsers.DOMParser; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.SAXException; import net.tk_factory.example.AbstractExample; /** * DOM(Document Object Model)を使用したサンプルプログラムです。<br/> * <br/> * <b>内容</b> * <ol type="1"> * <li>ルート要素の子要素の情報を取得します。</li> * </ol> * * @author Takafumi Kondo (TK Factory) */ public class ExampleGetChildElements extends AbstractExample { /** クラス名 */ private static final String CLASS_NAME = ExampleGetChildElements.class.getSimpleName(); /** ロガー */ private static final Logger LOGGER = Logger.getLogger(ExampleGetChildElements.class.getName()); /** 入力ファイル名 */ private static final String IN_FILE_NAME = EXAMPLE_FILE_DIRECTORY + CLASS_NAME + ".xml"; /** * ExampleGetChildElementsオブジェクトを構築すると、 * UnsupportedOperationExceptionがスローされます。<br/> */ protected ExampleGetChildElements() { throw new UnsupportedOperationException(); } /** * mainメソッドです。<br/> * * @param args 引数 */ public static void main(String[] args) { LOGGER.info("[START]" + CLASS_NAME); try { //パーサを生成する DOMParser parser = new DOMParser(); //XMLファイルをパースする parser.parse(IN_FILE_NAME); //DOCUMENTノードを取得する Document document = parser.getDocument(); if (document.hasChildNodes()) { //ルート要素がある場合 //ルート要素を取得する Node root = document.getFirstChild(); //ルート要素のノード名を取得する LOGGER.debug(root.getNodeName()); //ルート要素のノードタイプを取得する LOGGER.debug(root.getNodeType()); if (root.hasChildNodes()) { //ルート要素に子要素がある場合 //子要素を取得する Node child = root.getFirstChild(); while (child != null) { //子要素のノード名を取得する LOGGER.debug(child.getNodeName()); //子要素のノードタイプを取得する LOGGER.debug(child.getNodeType()); //次の子要素を取得する child = child.getNextSibling(); } } } } catch (SAXException ex) { //XMLファイルのパースに失敗した場合 LOGGER.error(getStackTrace(ex)); } catch (IOException ex) { //入出力例外が発生した場合 LOGGER.error(getStackTrace(ex)); } LOGGER.info("[E N D]" + CLASS_NAME); } }
上記のサンプルプログラムの実行結果は以下の通りです。
2010/04/24 22:22:27.248 [INFO ]: 0:[START]ExampleGetChildElements 2010/04/24 22:22:27.264 [DEBUG]: 16:root 2010/04/24 22:22:27.264 [DEBUG]: 16:1 2010/04/24 22:22:27.264 [DEBUG]: 16:#text 2010/04/24 22:22:27.264 [DEBUG]: 16:3 2010/04/24 22:22:27.264 [DEBUG]: 16:child1 2010/04/24 22:22:27.264 [DEBUG]: 16:1 2010/04/24 22:22:27.264 [DEBUG]: 16:#text 2010/04/24 22:22:27.264 [DEBUG]: 16:3 2010/04/24 22:22:27.264 [DEBUG]: 16:child2 2010/04/24 22:22:27.264 [DEBUG]: 16:1 2010/04/24 22:22:27.264 [DEBUG]: 16:#text 2010/04/24 22:22:27.264 [DEBUG]: 16:3 2010/04/24 22:22:27.264 [DEBUG]: 16:child3 2010/04/24 22:22:27.264 [DEBUG]: 16:1 2010/04/24 22:22:27.264 [DEBUG]: 16:#text 2010/04/24 22:22:27.264 [DEBUG]: 16:3 2010/04/24 22:22:27.264 [DEBUG]: 16:child4 2010/04/24 22:22:27.264 [DEBUG]: 16:1 2010/04/24 22:22:27.264 [DEBUG]: 16:#text 2010/04/24 22:22:27.264 [DEBUG]: 16:3 2010/04/24 22:22:27.264 [DEBUG]: 16:child5 2010/04/24 22:22:27.264 [DEBUG]: 16:1 2010/04/24 22:22:27.264 [DEBUG]: 16:#text 2010/04/24 22:22:27.264 [DEBUG]: 16:3 2010/04/24 22:22:27.264 [INFO ]: 16:[E N D]ExampleGetChildElements
関連記事
ソースを見直し、一部、修正しました。