Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > rexml/parsers/pullparserライブラリ
プル方式の XML パーサ。
REXML::Parsers::StreamParser はパースした結果をコールバックによって受動的に受け取りますが、このパーサは REXML::Parsers::PullParser#pull によってパーサから結果をイベントという形で順に能動的に取り出します。外部的にはこのクラスのオブジェクトはイベントのキューと見なせます。 pull はそのキューの先頭を取り出し、キューから取り除きます。
pull は REXML::Parsers::PullEvent オブジェクトを返します。このオブジェクトの REXML::Parsers::PullEvent#event_type で「開始タグ」「終了タグ」といったイベントの種類を取得します。 REXML::Parsers::PullEvent#[] でそのイベントのパラメータ (例えば開始タグなら要素名と属性)を得ることができます。
REXML::Parsers::PullEvent#event_type で得られるイベントの種類のシンボルを列挙しています。
これらのうちのいくつかは、 REXML::Parsers::PullEvent#start_element? などのメソッドで判定することが可能です。
XML要素の開始タグ。属性は { 属性名文字列 => 属性値文字列 } という Hash
XML要素の終了タグ
テキストノード
XML処理命令(Processing Instruction, PI)
コメント
DTD 開始。判定は REXML::Parsers::PullEvent#doctype? メソッドで、 start_doctype? ではない
DTD 終了
DTDの属性リスト宣言。属性名とデフォルト値 は { 属性名文字列 => デフォルト値文字列(なければnil) } という Hash
DTDの要素宣言
DTDの実体宣言
DTDの記法宣言
cdata セクション
XML宣言
doctype内のパラメータ実体参照。
require 'rexml/parsers/pullparser'
xml = <<EOS
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/css" href="style.css"?>
<!DOCTYPE root SYSTEM "foo" [
<!ELEMENT root (a+)>
<!ELEMENT a>
<!ENTITY bar "barbarbarbar">
<!ATTLIST a att CDATA #REQUIRED xyz CDATA "foobar">
<!NOTATION foobar SYSTEM "http://example.org/foobar.dtd">
<!ENTITY % HTMLsymbol PUBLIC
"-//W3C//ENTITIES Symbols for XHTML//EN"
"xhtml-symbol.ent">
%HTMLsymbol;
]>
<root xmlns:foo="http://example.org/foo"
xmlns:bar="http://example.org/bar"><![CDATA[cdata is here]]>
<a foo:att='1' bar:att='2' att='<'/>
&& <!-- comment here--> &bar;
</root>
EOS
parser = REXML::Parsers::PullParser.new(xml)
while parser.has_next?
p parser.pull
end
# >> xmldecl: ["1.0", "UTF-8", nil]
# >> text: ["\n", "\n"]
# >> processing_instruction: ["xml-stylesheet", " type=\"text/css\" href=\"style.css\""]
# >> text: ["\n", "\n"]
# >> start_doctype: ["root", "SYSTEM", "foo", nil]
# >> elementdecl: ["<!ELEMENT root (a+)"]
# >> elementdecl: ["<!ELEMENT a"]
# >> entitydecl: ["bar", "barbarbarbar"]
# >> attlistdecl: ["a", {"att"=>nil, "xyz"=>"foobar"}, " \n <!ATTLIST a att CDATA #REQUIRED xyz CDATA \"foobar\">"]
# >> notationdecl: ["foobar", "SYSTEM", nil, "http://example.org/foobar.dtd"]
# >> entitydecl: ["HTMLsymbol", "PUBLIC", "-//W3C//ENTITIES Symbols for XHTML//EN", "xhtml-symbol.ent", "%"]
# >> externalentity: ["%HTMLsymbol;"]
# >> end_doctype: []
# >> text: ["\n", "\n"]
# >> start_element: ["root", {"xmlns:foo"=>"http://example.org/foo", "xmlns:bar"=>"http://example.org/bar"}]
# >> cdata: ["cdata is here"]
# >> text: ["\n ", "\n "]
# >> start_element: ["a", {"foo:att"=>"1", "bar:att"=>"2", "att"=>"<"}]
# >> end_element: ["a"]
# >> text: ["\n && ", "\n && "]
# >> comment: [" comment here"]
# >> text: [" &bar;\n", " barbarbarbar\n"]
# >> end_element: ["root"]
# >> text: ["\n", "\n"]
REXML::Parsers::PullEvent | REXML::Parsers::PullParser で使われるパース結果を表すイベントクラス。 |
REXML::Parsers::PullParser | プル方式の XML パーサクラス。 |