Java Tips – DOM – XMLドキュメントの要素のテキストを取得するには
DOM(Document Object Model)を使用して、XMLドキュメントの要素のテキストを取得する手順は以下の通りです。
- NodeクラスのgetNodeTypeメソッドで、テキストノードかどうかを確認します。
- テキストノードであった場合に、NodeクラスのgetNodeValueメソッドでテキストを取得します。
パース処理するXMLドキュメントは以下の通りです。
<?xml version="1.0" encoding="UTF-8"?> <root> <child>テキスト</child> </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 ExampleGetNodeValue extends AbstractExample { /** クラス名 */ private static final String CLASS_NAME = ExampleGetNodeValue.class.getSimpleName(); /** ロガー */ private static final Logger LOGGER = Logger.getLogger(ExampleGetNodeValue.class.getName()); /** 入力ファイル名 */ private static final String IN_FILE_NAME = EXAMPLE_FILE_DIRECTORY + CLASS_NAME + ".xml"; /** * ExampleGetNodeValueオブジェクトを構築すると、 * UnsupportedOperationExceptionがスローされます。<br/> */ protected ExampleGetNodeValue() { 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(); if (root.hasChildNodes()) { //ルート要素に子要素がある場合 //子要素を取得する Node child = root.getFirstChild(); while (child != null) { //子要素のノード名を取得する LOGGER.debug(child.getNodeName()); //子要素のノードタイプを取得する LOGGER.debug(child.getNodeType()); //子要素のテキストを取得する Node text = child.getFirstChild(); if (text != null && text.getNodeType() == Node.TEXT_NODE) { LOGGER.debug(text.getNodeValue()); } //次の子要素を取得する 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/25 22:56:30.472 [INFO ]: 0:[START]ExampleGetNodeValue 2010/04/25 22:56:30.472 [DEBUG]: 0:#text 2010/04/25 22:56:30.472 [DEBUG]: 0:3 2010/04/25 22:56:30.472 [DEBUG]: 0:child 2010/04/25 22:56:30.472 [DEBUG]: 0:1 2010/04/25 22:56:30.472 [DEBUG]: 0:テキスト 2010/04/25 22:56:30.472 [DEBUG]: 0:#text 2010/04/25 22:56:30.472 [DEBUG]: 0:3 2010/04/25 22:56:30.472 [INFO ]: 0:[E N D]ExampleGetNodeValue
関連記事
ソースを見直し、一部、修正しました。