DOM は小さなドキュメントに適した強力な解析ツールです
なぜそんなことを言うのですか? XML ドキュメント全体をメモリにロードしてドキュメント オブジェクト ツリーを形成するため
全体的に見ると怖そうですが、ちょっとしたことを読むのに使うとサックスに比べてかなり便利です。
追加や削除などの操作については書くつもりはありませんが、チュートリアルを見ていてあまりの醜さに吐きそうになりました。
だからこそ、後に jdom や dom4j といったツールが存在したのです…。
あまり言うことはありません。コードにアクセスしてください。
Dom 解析の例
インポート javax.xml.parsers.DocumentBuilder;
インポート javax.xml.parsers.DocumentBuilderFactory;
org.w3c.dom.Document をインポートします。
org.w3c.dom.Element をインポートします。
org.w3c.dom.NamedNodeMap をインポートします。
org.w3c.dom.Node をインポートします。
org.w3c.dom.NodeList をインポートします。
パブリック クラス デモ {
public static void main(String[] args) throws Exception {
// パーサー ファクトリ インスタンスを作成し、パーサーを生成します
DocumentBuilderFactory ファクトリ = DocumentBuilderFactory.newInstance();
DocumentBuilder ビルダー = Factory.newDocumentBuilder();
//解析する必要があるドキュメントオブジェクトを作成します
ファイル f = 新しい File("books.xml");
//ドキュメントを解析し、Document オブジェクトを返します。この時点で、XML ドキュメントはメモリにロードされています。
//さて、解析をさらに強化しましょう。残りはデータを取得することです。
ドキュメント doc = builder.parse(f);
//ドキュメントのルート要素を取得します
//なぜこれを行うのかというと、ドキュメント オブジェクト自体がツリー構造であり、これがツリーのルートだからです。
//もちろん、要素コレクションを直接見つけて、この手順を省略することもできます
要素ルート = doc.getDocumentElement();
// ルート ノードは上で見つかりました。ここで、ルート ノードの下にある要素のコレクションの取得を開始します。
NodeList リスト = root.getElementsByTagName("book");
for (int i = 0; i < list.getLength(); i++) {
// item() メソッドを通じてコレクション内のノードを検索し、それを Element オブジェクトに変換します
要素 n = (要素) list.item(i);
// オブジェクト内の属性マップを取得し、for ループを使用して抽出して出力します
NamedNodeMap ノード = n.getAttributes();
for (int x = 0; x < node.getLength(); x++) {
ノード nn = ノード.アイテム(x);
System.out.println(nn.getNodeName() + ": " + nn.getNodeValue());
}
//要素の内容を表示します。コードは非常に複雑で、ほぼ固定された形式です
System.out.println("title: " +n.getElementsByTagName("title").item(0).getFirstChild().getNodeValue());
System.out.println("著者: " + n.getElementsByTagName("著者").item(0).getFirstChild().getNodeValue());
System.out.println();
}
}
}
出力結果: