Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > rexml/parsers/ultralightparserライブラリ
パース結果を配列で作られた木構造により返すパーサ。
REXML::Parsers::UltraLightParser.new でパーサオブジェクトを 生成し、REXML::Parsers::UltraLightParser#parse でパースし その結果の木構造を返します。
REXML::Parsers::UltraLightParser#parse が返す XML の各ノードは配列で表現されます。 配列の最初の要素はシンボルでノードの種類を表わし、2番目以降の要素で そのノードの情報を保持しています。 例えばテキストノードは [:text, テキスト文字列 ] という2要素の配列で 表現されます。XML 要素のように子ノードを持つ場合、 それらの子ノードもこの配列の要素として保持されます。
REXML::Parsers::UltraLightParser#parse の返り値となる 木のルートは特別で、ノードの種類を表すシンボルを持ちません。 XML宣言、DTD、ルート要素、テキストノードの配列です。例も確認してください。 木のルートの配列に含まれるテキストノードはあまり意味がないので たいがいの場合には無視すべきでしょう。
各ノードは以下のような配列で表現されます。
XML要素。属性は { 属性名文字列 => 属性値文字列 } という Hash。 子ノードの配列は node[4..-1] で得られる。
テキストノード
XML処理命令(Processing Instruction, PI)
コメント
DTD。子ノードの配列は node[6..-1] で得られる。
DTDの属性リスト宣言。属性名とデフォルト値 は { 属性名文字列 => デフォルト値文字列(なければnil) } という Hash
DTDの要素宣言
DTDの実体宣言
DTDの記法宣言
cdata セクション
XML宣言
doctype内のパラメータ実体参照。
以下の例は簡単な XML をパースし、その結果を返しています。[...]の部分は親 ノードを指しているので、pp の表示では省略されています。
require 'rexml/parsers/ultralightparser' require 'pp' parser = REXML::Parsers::UltraLightParser.new(<<XML) <?xml version="1.0" encoding="UTF-8" ?> <root> <a n="1">xyz</a> <b m="2" /> </root> XML pp parser.parse # >> [[:xmldecl, "1.0", "UTF-8", nil], # >> [:text, "\n"], # >> [:start_element, # >> [...], # >> "root", # >> {}, # >> [:text, "\n "], # >> [:start_element, [...], "a", {"n"=>"1"}, [:text, "xyz"]], # >> [:text, "\n "], # >> [:start_element, [...], "b", {"m"=>"2"}], # >> [:text, "\n"]], # >> [:text, "\n"]]
Ruby 2.1.0 以前に添付されている rexml の UltraLightParser は doctype の処理にバグがあります。そのため doctype を持つ XML 文書には 使わないでください。
REXML::Parsers::UltraLightParser | パース結果を配列で作られた木構造により返すパーサクラス。 |