倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

javax.xml

XML 文書のフォーマット 出力編

前回に続き、今回は XML 文書のフォーマットの「出力編」。 SAX, DOM はナシ。 代わりに javax.xml.transform パッケージ (TrAX API) を扱います。各 API での対象となるクラスは以下の表の通り: API version クラス transform Java SE 6 (javax.xml.transf…

XML 文書のフォーマット 入力編

Java で XML 文書を扱う API がいろいろありますが、入出力の際に指定できるフォーマットが各 API でいろいろあるので、チョット整理しておきましょう。 JDOM の Format や dom4j の OutputFormat は次回。今回は読み込みの際に処理を行う「入力編」。 各 AP…

XML 文書内の位置を取得するインターフェース

SAX API, DOM API, javax.xml.** パッケージ内には、XML 文書を読み込む際に読み込み位置を取得するためのインターフェースが幾つか定義されています。 今回は、それらを簡単に整理しておきます。位置を指定するインターフェース 読み込み位置を取得するため…

XMLStreamWriter#writeXxxx() メソッド (3) : 名前空間を使用する場合の要素・属性

今回は名前空間を使用する場合の要素と属性を書き出す XMLStreamWriter#writeXxxx() メソッドを見ていきましょう。定義されているメソッドは、要素の開始、空要素、属性の書き出しメソッドです: void writeStartElement(String uri, String localName); voi…

XMLStreamWriter#writeXxxx() メソッド (2) : 名前空間を使用しない場合の要素・属性

前回に引き続き、今回も XMLStreamWriter インターフェースに定義されている writeXxxx() メソッドを見ていきましょう。 今回見ていくのは名前空間を使用しない場合の「要素」と「属性」です。以下に書かれているサンプルでは、「writer」はXMLStreamWriter …

XMLStreamWriter#writeXxxx() メソッド (1)

今回は XMLStreamWriter インターフェースに定義されている writeXxxx() メソッドを見ていきます(一部次回)。 これらは各種 XML ノードを書き出しますが、大まかに分類すると次のようになります: 文書 writeStartDocument() writeEndDocument() 要素(次…

XMLStreamWriter

XMLStreamWriter は XMLEvent を用いずに XML ノードを外部へ出力するクラスです。 XMLEventWriter の使用手順は以下の通り: XMLStreamWriter のインスタンスを取得する XMLStreamWriter のインスタンスを用いて XML ノードを書き出す XMLStreamWriter をフ…

XMLEventWriter

XMLEventWriter は XMLEvent を外部へ出力するクラスです。 XMLEventWriter の使用方法は以下のような手順で行います: XMLEventWriter のインスタンスを取得する XMLEventWriter のインスタンスを用いて XML イベントを書き出す XMLEventWriter をフラッシ…

続・NamespaceContext の実装を考える

前回までは、DOM や dom4j のようにメモリ上に XML ツリーを展開して扱う API のための NamespaceContext 実装を考えていました(一覧)。今回はそれを利用して、StAX のような API で用いることのできる NamespaceContext 実装を考えてみます。方針 実装方…

XMLInputFactory に設定できるプロパティ

今回は javax.xml.stream.XMLInputFactory に設定できるプロパティを見ていきます。 プロパティの設定を変更することで、XML 文書の解析方法を変えることが出来ます。解析方法の設定を、実際に解析を行う XMLEventReader や XMLStreamReader ではなく、それ…

XMLStreamReader で SAX 解析

XMLEventReader の時と同様、StAX 解析のサンプルとして XMLStreamReader を用いて SAX 解析を行うクラス StaxSAXParser を実装してみましょう。 ここでは、XML イベントとして扱うのは org.xml.sax.ContentHandler が扱うもの*1とします(org.xml.sax.ext.L…

XMLStreamReader

XMLStreamReader も、XMLEventReader 同様 XML 文書を解析するクラスですが、解析中に XML イベントオブジェクトを生成しないため素早く動作します。 XMLSteamReader を用いた XML 文書の解析の手順は、XMLEventReader と(解析処理の実装以外は)ほとんど同…

NamespaceContext の実装を考える (7) : AbstractNamespaceContext の使用例

今回は前回までで考えた AbstractNamespaceContext の実際の使い方を考えてみます(一覧)。ここでは dom4j に定義されている、XML ツリーの要素を表すインターフェース org.dom4j.Element から、NamespaceContext を取得できるようにしてみましょう*1。ただ…

NamespaceContext の実装を考える (6) : AbstractNamespaceContext

前回までで考えた、javax.xml.namespace.NamespaceContext の実装をサポートする抽象クラスは、結局、次のようになります(一覧): import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import…

NamespaceContext の実装を考える (5) : 引数が空文字列のときの挙動

前回までで javax.xml.namespace.NamespaceContext が実装すべきメソッド getNamespaceURI() getPrefixes() getPrefix() を一通り見ました。 今回は、それらのメソッドに空文字列 ("") を渡したときの挙動を見ていきます(一覧)。以下で見る挙動は、API ド…

NamespaceContext の実装を考える (4) : メソッド getPrefix()

今回は NamespaceContext#getPrefix() メソッド(一覧)。NamespaceContext#getPrefix(String) の返り値 Java SE 6 の API ドキュメントを見ると、返り値は以下のように定義されています: 引数の名前空間 URI 返り値 http://www.w3.org/XML/1998/namespace …

NamespaceContext の実装を考える (3) : メソッド getPrefixes()

今回は、指定された名前空間 URI から、それに対応する接頭辞の Iterator を返すメソッド NamespaceContext#getPrefixes(String) を考えます(一覧)。NamespaceContext#getPrefixes(String) の返り値 Java SE 6 の API ドキュメントを見ると、返り値は以下…

NamespaceContext の実装を考える (2) : メソッド getNamespaceURI()

今回は、指定された接頭辞から、それに対応する名前空間 URI を返すメソッド NamespaceContext#getNamespaceURI(String) を考えます(一覧)。NamespaceContext#getNamespaceURI(String) の返り値 Java SE 6 の API ドキュメントを見ると、返り値は以下のよ…

NamespaceContext の実装を考える (1) : 抽象メソッド

javax.xml.namespace パッケージに定義されている NamespaceContext インターフェース(簡単にはこちらを参照)は、標準 API 内に実装クラスもファクトリ・クラスも提供されていません。 したがって、自分でインスタンスを作成したい場合には、自作クラスを…

XMLEventReader で SAX 解析

StAX 解析のサンプルとして、XMLEventReader を用いて SAX 解析を行うクラス StaxSAXParser を実装してみましょう。 ただし、XML イベントとして扱うのは org.xml.sax.ContentHandler が扱うもの*1とします(org.xml.sax.ext.LexicalHandler が扱うイベント…

XMLEventReader

XMLEventReader は XML 文書を解析して XML イベントを返すクラスです。 XMLEventReader を用いた XML 文書の解析の手順は、概ね以下のようになります: XMLInputFactory のインスタンスを取得する (必要なら)XMLInputFactory の設定をする XMLEventReader…

続・StAX での XML イベント

前回に引き続き、今回も XML イベント。 今回は、javax.xml.stream.events.XMLEvent インターフェースに定義されているメソッドと、XML イベントの種類を見ていきます。XMLEvent インターフェースに定義されているメソッド XMLEvent インターフェースに定義…

StAX での XML イベント

今回は XML 文書を(イベント・ベースで)解析する際などに使用する「XML イベント」のサブタイプを見ていきます。XML イベントを表す型は javax.xml.stream.events.XMLEvent です。 全ての XML イベントはこのインターフェースを拡張しています。 具体的に…

StAX で入出力を行うインターフェース

StAX API は XML 文書の入出力を行うクラス群ですが、入出力それぞれに『ストリーム・ベース』と『イベント・ベース』の2種類のアプローチがあります。イベント・ベース SAX を説明したときに「SAX イベント」という言葉を(勝手に)使っていました。 これは…

javax.xml.stream パッケージ

今回から javax.xml.stream パッケージとそのサブパッケージに含まれるクラス群「StAX」*1を見ていきましょう(一覧)。 これは前回までに見てきた SAX や DOM のように XML 文書を解析するための API です(簡単な説明はこちら)。SAX や DOM との違いの1つ…

DocumentBuilderFactory, DocumentBuilder

前回までの SAX API とはうって変わって、今回からは DOM API 。 SAX API のときとは違って、 org.w3c.dom パッケージ内のクラスには深入りしません(出てくるのは org.w3c.dom.Document だけの予定)(記事一覧)。org.w3c.dom.Document オブジェクトの取得…

QName を使った SAX イベント・ハンドラ (3) : 実装クラス

今回は、前回作成したの2つのインターフェースの実装クラス JDefaultHandler, JAttributesImpl クラスを作成します。JDefaultHandler クラス JDefaultHandler は org.xml.sax.helpers.DefaultHandler を拡張して作成します。 各メソッドの実装の概要は以下の…

QName を使った SAX イベント・ハンドラ (2) : インターフェース

今回は、前回示したクラス群の中の2つのインターフェース JContentHandler, JAttributes を作成します。JContentHandler インターフェース JContentHandler は org.xml.sax.ContentHandler を拡張して作成します。 また、JContentHandler には、javax.xml.na…

DocumentBuilderFactory の設定

今回は DocumentBuilderFactory に設定できる項目を見ていきます。 これら DocumentBuilderFactory の設定項目はそのインスタンスから生成する DocumentBuilder に受け継がれます。 SAXParserFactory, SAXParser の場合と同様に、DocumentBuilder に対しては…

QName を使った SAX イベント・ハンドラ (1) : 概要

org.xml.sax.ContentHandler で要素に対する SAX イベントを扱うとき(つまり startElement() や endElement() を実装するとき)、引数に3つも文字列が定義されているので少々扱いにくくなっています。 また、属性を表すインターフェース org.xml.sax.Attrib…