倭マン's BLOG

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

dom4j

org.dom4j.Document を構築するビルダー・改

以前に作成した「org.dom4j.Document を構築するのビルダー」をちょこっと修正(一覧)。以前のものは、createNode() メソッドでノードを作る際に、current プロパティを読み込んでルートノードかどうかを判断し、Element か Document のうち適切な方のイン…

org.dom4j.Document を構築するビルダー

前回のビルダーを拡張し、今回は org.dom4j.Element ではなく org.dom4j.Document を構築するビルダーにします(一覧)。サンプル・コード サンプル・コードはこんな感じ。 def builder = new SimpleDom4jBuilder() def doc = builder.table(customer:'c', i…

org.dom4j.Element を構築するビルダー

groovy.util.NodeBuilder の練習のため、dom4j の XML ドキュメントオブジェクトを構築するビルダーを作ってみます(一覧)。 簡単のため、以下の条件を課すことにします: 名前空間はサポートしない 構築後に返されるオブジェクトは org.dom4j.Element オブ…

dom4j 関連の記事を整理

・・・というか目次作りました→。ところで、dom4j のサイトが変わってた、というより、別物になってましたけど? 一体何なんでしょうか? website 云々って書いてますが・・・一応、そのサイトのサブディレクトリから dom4j-1.6.1 をダウンロードしたりでき…

改・NamespaceContext の実装を考える (6) : Dom4jNamespaceContext

以前に org.dom4j.Element クラス用に NamespaceContext のサブクラスを定義して、AspectJ を用いてその取得用のメソッドを織り込むということをやりました(一覧)。 新に作成した AbstractCompositeNamespaceContext クラスを用いて、同様のことをやってお…

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…

dom4j 2.0.0-SNAPSHOT

何時の間にやら dom4j の新バージョン『dom4j 2.0.0』がリリースされてました(一覧)。 SNAPSHOT ですけど。 2ヶ月ほども気付かないとは不覚。 Generics もサポートされてますッ。トップページには、バージョン2.0.0での変更点が以下のように書かれてます:…

SAX API で org.dom4j.Document を構築するサンプル

前回までで紹介した SAX API を使用するサンプルとして、SAX 解析によって org.dom4j.Document のインスタンスを構築するクラスを作成してみます*1(一覧)。クラス定義 作成するクラスを SimpleSAXContentHandler とします。 SAXParser を用いて解析を行う…

ノードの変更と名前空間宣言 (2) -- 名前空間宣言に関するメソッド

今回は、要素に対して名前空間宣言を付加したり取り外したりするメソッドを見ていきます(一覧): Element#addNamespace(String, String) Element#remove(Namespace) Namespace#detach() Element#addNamespace(String, String) メソッド addNamespace(Strin…

ノードの変更と名前空間宣言 (1) -- 子要素に関するメソッド

今回から何回かに分けて、XML 文書のノード構成を変更する際に、名前空間がどのように扱われているかを見ていきましょう(一覧)。 今回は、要素に対して子要素を付加したり取り外したりするメソッドです: Element#add(Element) Element#detach()*1 ちなみ…

名前空間の暗黙的取り扱い (3) -- 名前を文字列で指定して子ノードを取得するメソッド

今回は、「名前空間の暗黙的取り扱い」とは少々違うかもしれませんが、org.dom4j.Element に定義されている「文字列を指定してノードを取得する」メソッドを見ていきます(一覧)。 具体的には attribute(String) : Attribute attributeValue(String) : Stri…

名前空間の暗黙的取り扱い (2) -- 名前を文字列で指定して子ノードを付加するメソッド

今回は org.dom4j.Element に定義されている、要素に対して新たにノードを付け加えるメソッドを2つ見ていきます(一覧): addElement(String) : Element*1 addAttribute(String, String) : Element 付け加えるノードが要素か属性かによって、設定される名前…

名前空間の暗黙的取り扱い (1) -- 名前を文字列で指定してノードを生成するメソッド

dom4j は XML 名前空間をサポートしているので、要素や属性を生成・指定する際には、通常 QName を使用する必要があります。 ただし、毎回 QName を用いて生成・取得を行うのは手間なので、文字列 (java.lang.String) を用いてこれらを行う方法が提供されて…

org.dom4j.Element に定義されている名前空間関連のメソッド (3)

今回扱うメソッドは以下の3つです(一覧): getNamespaceForPrefix(String) : Namespace getNamespaceForURI(String) : Namespace getNamespacesForURI(String) : List getNamespaceForPrefix(String) : Namespace このメソッドは、引数の文字列を接頭辞と…

org.dom4j.Element に定義されている名前空間関連のメソッド (2)

今回は declaredNamespaces() additionalNamespaces() の2つのメソッドを見ていきます(一覧)。まず、以降で参照する XML 文書(の断片)を載せておきます: <a xmlns="ns" xmlns:p1="ns1" xmlns:p2="ns2"/> <b xmlns:p1="ns1" xmlns:p2="ns2"/> Element#declaredNamespaces() : List このメソッドは、対象要素に宣言されている名前空間のリ</b></a>…

org.dom4j.Element に定義されている名前空間関連のメソッド (1)

XML の要素をモデル化したクラス org.dom4j.Element には、名前空間(宣言)に関連するメソッドがいくつか定義されています(一覧)。org.dom4j.Element に定義されている名前空間関連のメソッドには、以下のようなものがあります: メソッド名 返り値 引数 …

名前空間とQName

dom4j の連載で名前空間と QName についてあまり触れなかったので、ここで簡単な使い方を(一覧)。Namespace org.dom4j.Namespace は名前空間(宣言)ノードを表すクラスです。 Namespace オブジェクト(通常の XML 文書の名前空間ノードも)のイメージは、…

dom4j の基礎的な使い方 終了

ひとまず、dom4j の基本的な使い方の連載は終了。 記事の一覧はこちらもしくはこちらを参照。今後、ユーティリティやスタイルシートなどの使い方を解読できればします。と言いつつ、名前空間と QName についてチョット記事を追加。 こちらをどうぞ。

dom4j を使うための POM ファイル

前回、Maven2 上で dom4j が依存するライブラリを見ました。 今回は、具体的に POM ファイルを書いてみましょう(一覧)。ここでは、以下の条件 対象となる Java 事項環境は Java SE 1.4 以降(すなわち xml-api は依存性に入れない) XPath を使う(すなわ…

dom4j の依存関係

今回は、Maven2 の POM ファイルを基に、dom4j-1.6.1(以下、dom4j)が依存している他のライブラリを見ていきましょう(一覧)。Maven2 にはライブラリの依存関係に対してスコープを定義できるんでした→。 以下では dom4j の POM ファイルに定義されてる依存…

出力フォーマットを指定する

今回は、Document オブジェクトをファイルなどに出力する際に、そのフォーマットを指定する org.dom4j.OutputFormat(以下、 OutputFormat)について見ていきます(一覧)。 OutputFormat は概ね org.dom4j.XMLWriter(以下、XMLWriter)と共に用います。Out…

Document を出力する

今回は、第2回に対して Document オブジェクトを XML ファイルや org.w3c.dom.Document オブジェクトなどに変換する方法を見ていきましょう(一覧)。 これらを行うクラスは、Document オブジェクトを生成するクラス同様、org.dom4j.io パッケージ内にありま…

XPath を使う

今回は XPath を用いて、ノードを取得したり(属性などの)値を取得したりする方法を見ていきます(一覧)。dom4j で XPath 機能を利用するためには、XPath エンジンである Jaxen の jar ファイルをクラスパス内に含める必要があります*1。Node#selectNodes(…

XML ノードを走査する

今回はノードを走査する方法を見ていきましょう(一覧)。 Quick Start Guide, cookbook 参照。 ノードを走査する方法としては、主に以下のものがあります: コレクション・フレームワークを用いる 高速ルーピング Visitor パターン ♪コレクション・フレーム…

XML ノード間の包含関係を理解する

前回は Node*1 のサブインターフェースの階層構造を見ました。 今回はそれらのインターフェース間の包含関係を見ていきましょう(一覧)。♪包含関係♪ 包含関係で重要な役割を果たすのは Branch インターフェースのサブインターフェース、 Document, Element …

XML ノードの型階層を理解する

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

Document オブジェクトを取得する

今回は org.dom4j.Document オブジェクトの取得方法を見ていきます(一覧)。 プログラム内において XML 文書を扱うには、何においてもまず、XML 文書を表すオブジェクトを取得しなければなりません。 dom4j で XML 文書を表すオブジェクトは org.dom4j.Docu…

dom4j を使おう!

前回チラッと紹介した dom4j の使い方を、何回かに渡って簡単に御紹介(一覧)。 dom4j って必要? 前回にも書きましたが、最近は dom4j のような「XML 文書をモデル化した Java オブジェクト」を用いるよりも、「XML 文書を Java オブジェクト(特に Java B…

Java & XML

★メモリー上に展開しない API★ 以下の API はどちらも、XML 文書をメモリー上に展開しないので、軽快に動作します。 SAX (Simple API for XML) いわゆる PUSH 型の読み取り API。 XMLReader または SAXParser によって読み取りを開始すると、出現した要素や…