MAP | SASAX ドキュメント > チュートリアル > SASAX による解析 > 単純要素 | << | >> |
本節では、 テキストを持つ単純要素の解析例を用いて、 SASAX による XML 文書の解析方法を説明します。
XML Schema によるスキーマおよび文書例を "文書構造" に示します。.
XML Schema によるスキーマ: <xs:schema targetNamespace="http://www.lares.dti.ne.jp/~foozy/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:local="http://www.lares.dti.ne.jp/~foozy/"> <xs:simpleType name="int"> <xs:restriction base="xs:integer"/> </xs:simpleType> <xs:element name="int" type="local:int"/> </xs:schema> 例: <foozy:int xmlns:foozy="http://www.lares.dti.ne.jp/~foozy/"> 12345678 </foozy:int>
対象文書が以下の特徴を持つことがわかります。
前述の文書を解析するためのオブジェクト群は、 "要素オブジェクト(群)の生成" に示すようにして生成されます。
String uri = "http://www.lares.dti.ne.jp/~foozy/"; IntElement intElement = new IntElement(null, uri, "int");
コンストラクタに対する "null" 引数は、 "intElement" が親要素を持たないルート要素である、ということを意味します。
ValueElement
クラス
(ないし NumberElement
クラス)
の派生クラスを用いることで、
他のデータ型を解析することが出来ます。
詳細は API ドキュメントを参照してください。
"Element
" 実装クラスを用いて
XML 文書を解析するためには、
以下に示すように、
"ElementDrivenHandler
" を用いて
(JAXP の)SAXParser に対して適合させる必要があります。
ElementDrivenHandler handler = new ElementDrivenHandler(intElement); // java.io.Reader である "reader" から // XML 文書を読み込みたい場合: handler.parse(reader); // java.lang.String である "document" から // XML 文書を読み込みたい場合: handler.parse(document);
両 ElementDrivenHandler#parse
メソッドはその内部で、
SAXParserFactory
から
SAXParser
を取得し、
自分自身を指定して SAXParser#parse
を起動します。
これにより、
Element
で定義されたメソッドが、
対応する SAX イベントに応じて起動されます。
備考: 本チュートリアルでは、 説明単純化のためにメモリ/性能効率は無視しています。 効率的な使用方法に関しては API ドキュメントを参照してください。
ElementDrivenHandler#parse
起動後、
IntElement
クラスの
getInteger
メソッドを
"intElement" に対して起動することで、
整数値を得ることが出来ます。
getInteger
メソッドの引数に関する詳細は、
"Custom element" ないし
API ドキュメントを参照してください。
チュートリアル本節におけるコードの完全なものは、
配布物の src/demo/sasax/src
配下にある
jp.ne.dti.lares.foozy.sasax.SimpleDemo です。
このクラスはバイナリ配布版中の demo.jar
に含まれています。
本節におけるクラス図を以下に示します。
本節におけるオブジェクト図を以下に示します。
SAXParser、ElementDrivenHandler および Element 実装クラスにおける処理フローは以下のようになります。
加えてシーケンス図を以下に示します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
表記 | 完全名 |
---|---|
Element | jp.ne.dti.lares.foozy.sasax.Element |
ElementDrivenHandler | jp.ne.dti.lares.foozy.sasax.ElementDrivenHandler |
IntElement | jp.ne.dti.lares.foozy.sasax.IntElement |
NumberElement | jp.ne.dti.lares.foozy.sasax.NumberElement |
ValueElement | jp.ne.dti.lares.foozy.sasax.ValueElement |
MAP | SASAX ドキュメント > チュートリアル > SASAX による解析 > 単純要素 | << | >> |