DOMはツリー構造になってるんで、便利ですね。
ツリー構造ってことは、繰り返しでさばけます。
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 53 54 55 56 57 58 59 60 61 62 63 64 | import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XmlReadTest { public static void main(String[] args) { try { //Documentを取得 Document document = DocumentBuilderFactory.newInstance() .newDocumentBuilder() .parse("c:\\work\\test.xml"); //出力 outputElement(document.getDocumentElement()); } catch (Exception e) { e.printStackTrace(); } } private static void outputElement(Element element) { //要素のタグ名を出力 System.out.println("タグ:" + element.getTagName()); //要素の属性を出力 if (element.hasAttributes()) { NamedNodeMap attributes = element.getAttributes(); for (int i = 0; i < attributes.getLength(); i++) { Node attribute = attributes.item(i); System.out.println(attribute.getNodeName() + "=\"" + attribute.getNodeValue() + "\""); } } //子要素 if (element.hasChildNodes()) { NodeList children = element.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); if (child.getNodeType() == Node.TEXT_NODE) { //テキストを出力 String str = child.getTextContent().trim(); if (!str.isEmpty()) { System.out.println("テキスト:" + str); } } else if (child.getNodeType() == Node.ELEMENT_NODE) { //子要素を出力 outputElement((Element) child); } } } } } |
実行結果
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 | タグ:items タグ:count テキスト:3 タグ:dummy a="aa" タグ:list b="bb" c="cc" タグ:item category="01" タグ:code テキスト:001 タグ:name テキスト:シャーペン タグ:remarks テキスト:しゃーぺん タグ:item category="02" タグ:code テキスト:002 タグ:name テキスト:ボールペン タグ:remarks テキスト:ぼーるぺん |
読み込んだXMLはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?xml version="1.0"?> <items> <count>3</count> <dummy a="aa" /> <list b="bb" c="cc"> <item category="01"> 001 <name>シャーペン</name> <remarks>しゃーぺん</remarks> </item> <item category="02"> 002 <name>ボールペン</name> <remarks>ぼーるぺん</remarks> </item> </list> </items> |
サンプルの解説
XMLの解析は、再帰的に処理しています。
Element#getTagName()で、タグ名を取得。
Element#getAttributes()で、タグの属性を取得。
Node#getTextContent()で、テキストが取得できます。