DOMによる処理の応用

Download Report

Transcript DOMによる処理の応用

応用Java(Java/XML) 第5回
2006年5月26日
植田龍男
本日の目標




DOMツリーの操作の応用
特定のノードの検索
ツリーの編集(不要なノードの削除)
ツリーの視覚化(ウィンドウ表示)
XML文書の処理




XMLパーサ(parser)の概念
パーサの規格(SAX,DOM、他)
パーサを「取り出す」ための仕組み
SAXParser,
SAXParserFactory
DocumentBuilder,
DocumentBuilderFactory
パーサの取得のパターン
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
DocumentBuilder db =
dbf.newDocumentBuilder();
DOMの処理の特徴
XML文書の一括読み込み
(処理は読み込み完了後)
 XML文書の構造をツリーとしてメモリ上に
記憶
 DOMツリーの動的な変更も可能

DOMツリーの表現


org.w3c.dom.Node インタフェース
主要な Node のサブインタフェース
Document
Element
Attr
Text
ノードとしての性質


階層構造(親子関係)
getParentNode()
getChildNodes()
再帰的呼び出しによる処理
再帰的な呼び出しの例
public void search( Node node ) {
if( node.getNodeName().equals(“A”) )
print( node );
NodeList list = node.getChildNodes();
if( list.getLength() == 0 ) return;
for( int i=0; i<list.getLength(); i++ ) {
search( list.item(i));
}
属性の扱い


Attr 個々の属性(Nodeを継承)
NamedNodeMap 複数のNode
名前で識別(名前の重複はできない)
属性の処理の例
NamedNodeMap nnp = node.getAttributes();
for( int i=0; i<nnp.getLength(); i++ ) {
Node n = nnp.item( i );
if( n.getNodeType() ==
Node.ATTRIBUTE_NODE ) {
Attr a = (Attr)n;
String name = a.getName();
String value = a.getValue();
ツリーの視覚化とSwing


javax.swing.JTree クラス
javax.swing.tree パッケージ
DefaultMutableTreeNode クラス

javax.swing.event パッケージ
DOMツリーの視覚化(1)
dbf =DocumentBuilderFactory.newInstance();
db = dbf.newDocumentBuilder();
Document doc = db.parse( source );
Node rootTag = doc.getFirstChild();
root = newDefaultMutableTreeNode(
rootTag.getNodeName() );
tree = new JTree( root );
addChildren( rootTag, root );
DOMツリーの視覚化(2)
public void addChildren( Node node,
DefaultMutableTreeNode branch ) {
:
DefaultMutableTreeNode tn =
new DefaultMutableTreeNode(
child.getNodeName() );
branch.add( tn );
addChildren( child, tn );