応用 Java(Java/XML) 第 8 回

21
応応 Java(Java/XML) 応 8 応 2005 応 6 応 9 応 応応応応

description

応用 Java(Java/XML) 第 8 回. 2005 年 6 月 9 日 植田龍男. 前回の復習. DOM の応用 DOM ツリー内の検索処理 DOM ツリーの編集 ツリーの視覚化 (Swing 使用 ). 検索処理の例(要素名の検索). public void search( Node node ) { if( node.getNodeName().equals( “ A ” ) ) print( node ); NodeList list = node.getChildNodes(); - PowerPoint PPT Presentation

Transcript of 応用 Java(Java/XML) 第 8 回

Page 1: 応用 Java(Java/XML)  第 8 回

応用 Java(Java/XML) 第 8 回

2005 年 6 月 9 日植田龍男

Page 2: 応用 Java(Java/XML)  第 8 回

前回の復習 DOM の応用 DOM ツリー内の検索処理 DOM ツリーの編集 ツリーの視覚化 (Swing 使用 )

Page 3: 応用 Java(Java/XML)  第 8 回

検索処理の例(要素名の検索)

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)); } }

Page 4: 応用 Java(Java/XML)  第 8 回

宿題の答え(属性の検索 1)public void search( Node node, String name ) { if( node.getNodeType() == Node.ELEMENT_NODE ) { Attr attr = searchAttr( node, name ); if( attr != null ) printFullName( node, attr ); } NodeList list = node.getChildNodes(); if( list.getLength() == 0 ) return; for( int i=0; i<list.getLength(); i++ ) { search( list.item(i), name ); } }

Page 5: 応用 Java(Java/XML)  第 8 回

宿題の答え(属性の検索 2 )public Attr searchAttr( Node node, String name ) { 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; if( a.getName().equals( name ) ) return a; } } return null; }

Page 6: 応用 Java(Java/XML)  第 8 回

DOM の検索プログラムの問題点

検索パターンは複雑 そのすべてに対応するプログラムも複

雑 何か手助けはないか? みんなが利用できる「標準」の方法が

望ましい => XPath

Page 7: 応用 Java(Java/XML)  第 8 回

XPath とは? XML 文書のノードの位置を指定 検索の強力な手段 XSLT Xindice

Page 8: 応用 Java(Java/XML)  第 8 回

XPath の検索パターン (1)

child::abc abc child::text() child::* preceding-sibling::abc following-sibling::abc attribute::xyz

Page 9: 応用 Java(Java/XML)  第 8 回

XPath の検索パターン (2)

child::*/child::abc ancestor::abc decendant::abc

Page 10: 応用 Java(Java/XML)  第 8 回

XPath の検索パターン (3)

child::abc[position()=1] child::abc[attribute::xyz]

Page 11: 応用 Java(Java/XML)  第 8 回

XPath の検索パターン (4)

abc //abc abc[1] @xyz

Page 12: 応用 Java(Java/XML)  第 8 回

J2SE 5.0 と XML API javax.xml javax.xml.parsers javax.xml.transform javax.xml.transform.dom javax.xml.transform.sax javax.xml.transform.stream javax.xml.xpath javax.xml.namespace javax.xml.validation javax.xml.datatype

Page 13: 応用 Java(Java/XML)  第 8 回

javax.xml の思想 多数のパーサの実装を統合する枠組み パーサの実装に非依存なアプリケーシ

ョン 実現のために抽象化されたクラス群を

定義 共通の「デザインパターン」

Page 14: 応用 Java(Java/XML)  第 8 回

javax.xml.xpath 実装に依存しない Xpath の処理 XPath インターフェイス 検索の処理のメソッドを定義 XPathFactory クラス XPathConstants などのクラス

Page 15: 応用 Java(Java/XML)  第 8 回

参考:パーサの取得のパターンDocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder();

Page 16: 応用 Java(Java/XML)  第 8 回

実装に依存しない XPath の取得

import javax.xml.xpath.*; : XPathFactory xpf = XPathFactory.newInstance(); XPath xpath = xpf.newXPath(); :

Page 17: 応用 Java(Java/XML)  第 8 回

evaluate() メソッドの4パターン

対象となるノード Imputsource(XML 文書 ) Node (文書の一部 ) 返り値:単純な String or 特定のデータ型 (Object)

Page 18: 応用 Java(Java/XML)  第 8 回

evaluate() メソッドの役割(1)

必要な型のデータを受け取るDocument document = db.parse( new InputSource( "sample3.xml" );

NodeList list = (NodeList)xpath.evaluate( "//ABC" , document, XPathConstants.NODESET );

Page 19: 応用 Java(Java/XML)  第 8 回

evaluate() メソッドの役割(2)

必要な型のデータを受け取る

double d = (Double)xpath.evaluate( "//image/@width", new InputSource( "sample3.xml" ), XPathConstants.NUMBER );

Page 20: 応用 Java(Java/XML)  第 8 回

ここまでやってきたこと XML パーサ (parser) の概念 パーサの規格 (SAX,DOM)

Page 21: 応用 Java(Java/XML)  第 8 回

これからの目標 XPath XSLT 名前空間 (Namespace) XML 文書の妥当性の検証 DTD,XML Schema