今回は dom4j で実現している、XML 文書のオブジェクト・モデルを見ていきましょう(一覧)。
XML 文書には要素やテキストなど、いろいろなノードがあります。 それらを表すインターフェースは org.dom4j.Node を頂点とする階層構造をなしています。 これを図示すると下図のようになります(全て org.dom4j パッケージ内のインターフェース、クラスなので、パッケージ名は省略します):

Namespace のみ、具象クラスです。 それ以外は全てインターフェースです。
図の見方を少々。 矢印付の黄色い領域は、その中のインターフェースが全て矢印の指しているインターフェースを拡張していることを示しています。 例えば、Branch は Node を拡張し、Element は Branch を拡張します。 当然、Element は Node を拡張しています。
以下で、主要な型について getter メソッドを参考に見ていきましょう。 全ての型、全ての getter メソッドを挙げているわけではありません:
- Node
- Branch
- Document
- Element
- Namespace
- Attribute
- Text
♪Node♪
これは XML 文書内の全種類ノードが実装するインターフェースです。 このインターフェースを実装しているオブジェクトから取得出来るモノは以下の通り:
取得できるモノ | 型 | getter メソッド | 備考 |
---|---|---|---|
ノードの名前 | String | getName() | Element, Attribute → ローカル名 Document, Text → null。 |
型 | short | getNodeType() | |
親ノード | Element | getParent() | Document → null 親ノードがない → null |
テキスト | String | getText() | Document → "" Element → 子要素を取り除いたテキスト |
♪Branch♪
これは、子ノードを持つノードが実装するべきインターフェースです。 具体的な拡張インターフェースは Document と Element です。 子ノードへの Accessor メソッドが定義されています:
取得できるモノ | 型 | getter メソッド | 備考 |
---|---|---|---|
子ノード | Node | node(int) | content() によって、子ノードを List として取得できます*1。 |
content() によって返されるリストに含まれている Node の型は、Branch のサブクラスの型(すなわち Document か Element か)によって決まっています:
- Branch に可能なもの
- Element, Comment, ProcessingInstruction (Document にはただ1つの Element のみ可能。)
- Element にのみ可能なもの
- Namespace, Text, CDATA, Entity
♪Document♪
XML 文書を表すインターフェースです。 XML 文書についての情報と、ルート要素*2への Accessor メソッドが定義されています:
取得できるモノ | 型 | getter メソッド |
---|---|---|
XML 文書のエンコーディング | String | getXMLEncoding() |
文書型 | DocumentType | getDocType() |
ルート要素 | Element | getRootElement() |
♪Element♪
要素を表すインターフェースです。 タグ名、属性、子要素などに対する Accessor メソッドが定義されています:
取得できるモノ | 型 | getter メソッド | 備考 |
---|---|---|---|
QName*3 | QName | getQName() | |
宣言されている 名前空間 |
List | declaredNamespaces() | |
属性 | Attribute | attribute() | attributes() によって、属性を List として取得できます。 |
子要素 | Element | element() | elements() によって、子要素を List として取得できます。 |
♪Namespace♪
名前空間を表すクラスです。 接頭辞と名前空間 URI に対する Accessor メソッドが定義されています:
取得できるモノ | 型 | getter メソッド |
---|---|---|
接頭辞 | String | getPrefix() |
名前空間 URI | String | getURI() |
♪Attribute♪
属性を表すインターフェースです。 属性名と属性値に対する Accessor メソッドが定義されています:
取得できるモノ | 型 | getter メソッド |
---|---|---|
QName | QName | getQName() |
属性の値 | String | getValue() |
♪Text♪
テキストを表すインターフェースです。 Node インターフェースの getText() メソッドを使用してテキストを取得できます。