スレッドセーフ、高速、機能性もある。XPathの実装を含み、検索式によってDOMツリーの好きな要素を取り出すことができる。3.1.4が添付されている。チュートリアル、APIリファレンスは下記で見られる。APIリファレンスのほうは不十分かつ誤りもある。使いかたをまとめてみた。HomeDOMツリーの生成と要素の取り出し何はともあれ、XML文書を読み込み、パースしないと始まらない。DOMツリーを生成してみる。XML文書を(妥当性検査せずに)パースし、DOMツリーを生成する。実体参照が変換される。区別したいときはこうすればいい。REXML::TextREXML::Document.newは、文字列またはIOオブジェクトを引数に取り、パースしてDOMツリーを生成する。Documentオブジェクトは、eachメソッドでXML宣言、要素などを順に取得できる。メソッドでは直接の子要素がブロックに渡される。)今度は、何もないところからXML文書を作ってみます。次のスクリプトはATOMフィードのひな形を作ります。呼び出すと、空のXML文書になります。外側の要素から順に作っていきます。STDOUT次のXML文書が出力されます。(手で整形しています。実際の出力では要素の間に空白、改行はありません。Feed</title></feed>XPathで要素を取り出すREXMLは、[]メソッドにXPath式を指定して、XML文書から柔軟に要素を取り出せます。更新)REXMLでは,次の表にある左の項目は,右のクラスのオブジェクトとなります。(以下、本文ではREXML::は省略します。Parentから、また、ParentとTextはChildクラスから派生しています。各クラスの関係は次のクラス図のとおりです。DocumentクラスはElementクラスから派生しています。Coreでは、Documentインターフェイス、Elementインターフェイスは両方ともNodeから派生している。いろいろなパーサREXMLには、ストリームパーサ、pull-parserも付いている。これらのパーサは、XML文書の使い方によって使い分ける。別のプログラミング言語からの移植の場合でも適宜使い分けることになるだろう。ストリームパーサストリームパーサは、特定の要素や属性にしか用事がないときなどに使う。ストリームパーサを使うときは、パーサにリスナオブジェクトを渡して、適宜コールバックさせる。Parsers::StreamParserクラスには、StreamListenerモジュールが対応する。StreamListenerモジュールをincludeし、コールバックさせたい項目のメソッドを定義すればいい。StreamListenerモジュールをincludeすればいい。listener).parsePullパーサ今度は、ノードを一つずつ取り出すパーサ。APIドキュメントの例は誤っている。Parsers::PullParserオブジェクトは、has_next?メソッドとpullメソッドを持つ。戻り値はParsers::PullEventインスタンス。{}}endendSAX2リスナParsers::StreamParserと似たパーサとして、SAX2パーサがある。すべてのメソッドを実装しないときは、SAX2Listenerモジュールをincludeすればいい。イベントリスナをattachする。SAX2リスナをattachする。うち、REXMLでサポートされている。