JavaでXMLをDOM操作するためには下記クラスを使用します。
javax.xml.parsers.DocumentBuilder
- XMLドキュメントからDOM Documentインスタンスを取得するAPI
javax.xml.parsers.DocumentBuilderFactory
- アプリケーションでXMLドキュメントからDOMオブジェクト・ツリーを生成するパーサーを取得できるファクトリAPI
XMLファイル
以下のXMLを読み込み、取得した要素をコンソールへ出力してます。
1 2 3 4 5 6 7 |
<?xml version="1.0" encoding="UTF-8"?> <product name="商品" company="A社"> <goods name="時計" /> <goods name="スマホ" /> <goods name="パソコン" /> <goods name="エアコン" /> </product> |
Java:DOMで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 |
import java.io.IOException; import java.util.Objects; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class XmlParse { public static void main(String[] args) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse("./SampleXml.xml"); // ルート要素を取得 Element root = doc.getDocumentElement(); // ルート要素の属性をコンソールへ表示 System.out.println("種類:" + root.getAttribute("name")); System.out.println("会社名:" + root.getAttribute("company")); // ルート要素の子ノードを取得 NodeList node = root.getChildNodes(); for(int i = 0; i < node.getLength(); i++) { Node childNode = node.item(i); if(childNode.getNodeType() == Node.ELEMENT_NODE) { Element child = (Element)childNode; if(Objects.equals(child.getNodeName(), "goods")) { // 子要素の属性をコンソールへ表示 System.out.println("商品名:" + child.getAttribute("name")); } } } } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); } } } |
コンソール(実行結果)
1 2 3 4 5 6 |
種類:商品 会社名:A社 商品名:時計 商品名:スマホ 商品名:パソコン 商品名:エアコン |