Presentation is loading. Please wait.

Presentation is loading. Please wait.

第7回 2007年6月8日 応用Java (Java/XML).

Similar presentations


Presentation on theme: "第7回 2007年6月8日 応用Java (Java/XML)."— Presentation transcript:

1 第7回 2007年6月8日 応用Java (Java/XML)

2 前回までやったこと 「XMLパーサ」-- Java でXMLを処理 javax.xml.stream パッケージのパーサ
SAX(Simple API for XML) のパーサ 応用(1) – テーブルの利用 「要素の出現回数を調べる」 応用(2) – フィルタ的な処理

3 本日(6/8)の講義内容 DOMによる処理 応用:ツリー構造の視覚化 javax.swing.JTree

4 (復習) パッケージとAPI(1) javax.xml.stream XMLEventReader インタフェース
XMLInputFactory クラス javax.xml.stream.events XMLEvent インタフェース サブインタフェース群

5 (復習) パッケージとAPI(2) SAXParser, SAXParserFactory org.xml.sax
javax.xml.parsers SAXParser, SAXParserFactory org.xml.sax XMLReader, InputStream 最も初期から利用可能だったパーサ

6 パーサを取得するパターン SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser(); XMLReader reader =    parser.getXMLReader();

7 SAXの処理の特徴 XML文書を読み込みながら処理 特定の「節目」でイベントが発生 (イベント駆動型の処理)
イベントの処理はHandlerが担当 ContentHandler(のサブクラス) ErrorHandler(のサブクラス)

8 XMLReaderへのHandlerの登録
XMLReader reader = parser.getXMLReader(); reader.setContentHandler( new MyContentHandler() ); reader.setErrorHandler( new MyErrorHandler() );

9 その後で、パーシングを開始 XMLReader reader …. : InputSource source =
new InputSource( “sample.xml” ); reader.parse( source );

10 SAXの処理の特徴 XML文書の読み込みと処理が並行に進行 要素(タグ)ごとに逐次処理 読み込みと処理は同時に終了
(後処理には別の機構が必要)

11 ContentHandler の主要な仕事
startDocument() – パーシングの開始時 endDocument() – パーシングの終了時 startElement() – 要素(タグ)の開始 endElement() – 要素(タグ)の終了 characters() – 平文テキストの読み込み

12 ErrorHandlerの仕事 3つのエラーレベル fatalError 文書名の間違い、不存在 XML文書として不適切(文法エラー)
warning エラーではない不適切な記述

13 DOMによる処理 DOM(Document Object Model ) 文書の構造を記述(DOMツリー)

14 パーサの取得のパターン DocumentBuilderFactory bf =
DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder();

15 DOMの処理の特徴 XML文書の一括読み込み (処理は読み込み完了後) XML文書の構造をツリーとしてメモリ上に記憶

16 DOM と SAXとの比較 処理の手順 SAX:文書の頭から逐次処理 DOM:一括読み込み後ランダムアクセス 適した用途
システムへの負荷 SAX:比較的低い DOM:メモリ必要

17 DOMツリーの表現 org.w3c.dom.Node インタフェース 主要な Node のサブインタフェース Document
Element Attr Text

18 XML文書の構造の例 <document> <title>Java and XML</title>
Let's begin, now! <image source="java.png" width="512" height="400"/> </document>

19 DOMツリーによる表現

20 ノードとしての性質 階層構造(親子関係) getParentNode() getChildNodes() 再帰的呼び出しによる処理

21 再帰的な呼び出しの例 public void printNode( Node node ) {
NodeList list = node.getChildNodes(); if( list.getLength() == 0 ) return; for( int i=0; i<list.getLength(); i++ ) { printNode( list.item(i)); }

22 XMLにおける「属性(Attribute)」
要素の開始タグ内部に記述 個数は任意、出現順序は意味を持たない 「名前(name)」と「値(value)」のペアの集まり <image source=“java.png” width=“200” height=“300”></image>

23 属性(Attribute)の扱い 属性も Nodeのサブインタフェース Attr 属性の取り出しには Nodeの集合
NamedNodeMap 重複しない名前を指定 インデックス番号による管理

24 属性を扱う例(1) if( node.getNodeType() == Node.ELEMENT_NODE ) {
NamedNodeMap nnp = node.getAttributes(); }

25 属性を扱う例(2) for( int i=0; i<nnp.getLength(); i++ ) {
Node n = nnp.item( i ); if( n.getNodeType() == Node.ATTRIBUTE_NODE ) { Attr a = (Attr)n; System.out.print( "[" + a.getName() + "=" + a.getValue() + "]" ); }

26 補足 NamedNodeMap の要素は一般に Node (形式上は Attr のみが対象ではない)
getAttributes()メソッドは Nodeで定義 (しかし、Element以外では無意味) 他の属性を扱うメソッドはElementで定義 getAttribute(), setAttribute()

27 ツリーの視覚化とSwing javax.swing.JTree クラス javax.swing.tree パッケージ
DefaultMutableTreeNode クラス javax.swing.event パッケージ

28 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 ); addToTree( rootTag, root );

29 DOMツリーの視覚化(2) public void addToTree( Node node,
DefaultMutableTreeNode branch ) { : DefaultMutableTreeNode tn = new DefaultMutableTreeNode( child.getNodeName() ); branch.add( tn ); addChildren( child, tn );


Download ppt "第7回 2007年6月8日 応用Java (Java/XML)."

Similar presentations


Ads by Google