パース結果を配列で作られた木構造により返すパーサ。
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"]]
REXML::Parsers::UltraLightParser | パース結果を配列で作られた木構造により返すパーサクラス。 |