Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > rexml/streamlistenerライブラリ > REXML::StreamListenerモジュール
クラスの継承リスト: REXML::StreamListener
REXML::Parsers::StreamParser で使われるコールバックオブジェクトのためのモジュールです。
このモジュールを include して、各メソッドを適切にオーバーライドした クラスのインスタンスを REXML::Parsers::StreamParser.new や REXML::Document.parse_stream の引数として渡します。
このモジュールで定義されているメソッド自体は何もしません。 コールバックのデフォルト動作(何もしない)を定義しているだけです。
詳しい用例などについては REXML::Parsers::StreamParser を 見てください。
attlistdecl(element_name, attributes, raw_content) -> ()
[permalink][rdoc]DTDの属性リスト宣言をパースしたときに呼び出されるコールバックです。
<!ATTLIST a att CDATA #REQUIRED xyz CDATA "foobar">
という属性リスト宣言に対しては
element_name: "a" attributes: {"att"=>nil, "xyz"=>"foobar"} raw_content: " \n<!ATTLIST a att CDATA #REQUIRED xyz CDATA \"foobar\">"
という引数が渡されます。
cdata(content) -> ()
[permalink][rdoc]CDATA セクションをパースしたときに呼び出されるコールバックメソッドです。
<![CDATA[ xyz ]]>
というCDATAセクションに対しては
content: " xyz "
という引数が渡されます。
comment(comment) -> ()
[permalink][rdoc]XML文書内のコメントをパースしたときに呼び出されるコールバックメソッドです。
doctype(name, pub_sys, long_name, uri) -> ()
[permalink][rdoc]文書型宣言(DTD)をパースしたときに呼び出されるコールバックメソッドです。
pub_sys, long_name, uri はDTDが内部サブセットのみを 利用している場合には nil が渡されます。
<!DOCTYPE me PUBLIC "foo" "bar">
というDTDに対しては
name: "me" pub_sys: "PUBLIC" long_name: "foo" uri: "bar"
という引数が渡されます。
<!DOCTYPE root [ ...
というDTDに対しては
name: "root" pub_sys: nil long_name: nil uri: nil
という引数が渡されます。
doctype_end -> ()
[permalink][rdoc]文書型宣言(DTD)の終了区切りをパースしたときに呼び出されるコールバックメソッドです。
elementdecl(content) -> ()
[permalink][rdoc]DTDの要素型宣言をパースしたときに呼び出されるコールバックメソッドです。
<!ELEMENT root (a+)>
という属性型宣言に対しては
content: "<!ELEMENT root (a+)"
という引数が渡されます。
entity(content) -> ()
[permalink][rdoc]DTD内で、パラメータ実体参照(%entityname;)が現れたときに呼び出される コールバックメソッドです。
DTDの各宣言(要素型宣言や実体参照宣言)の内側で使われた 場合はこのメソッドはコールバックされません。 各宣言のためのコールバックメソッド (REXML::StreamListener#elementdecl や REXML::StreamListener#entitydecl など) の引数の一部として渡されます。
2.0.0 以前ではこのメソッドはコールバックされないことに注意してください。
entitydecl(content) -> ()
[permalink][rdoc]DTDの実体宣言をパースしたときに呼び出されるコールバックメソッドです。
実体宣言の書き方によって content に渡されるデータの形式が異なります。
require 'rexml/parsers/baseparser' require 'rexml/parsers/streamparser' require 'rexml/streamlistener' xml = <<EOS <!DOCTYPE root [ <!ENTITY % YN '"Yes"'> <!ENTITY % YN 'Yes'> <!ENTITY WhatHeSaid "He said %YN;"> <!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> <!ENTITY open-hatch PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://www.textuality.com/boilerplate/OpenHatch.xml"> <!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif> ]> <root /> EOS class Listener include REXML::StreamListener def entitydecl(content); p content; end end REXML::Parsers::StreamParser.new(xml, Listener.new).parse # >> ["YN", "\"Yes\"", "%"] # >> ["YN", "Yes", "%"] # >> ["WhatHeSaid", "He said %YN;"] # >> ["open-hatch", "SYSTEM", "http://www.textuality.com/boilerplate/OpenHatch.xml"] # >> ["open-hatch", "PUBLIC", "-//Textuality//TEXT Standard open-hatch boilerplate//EN", "http://www.textuality.com/boilerplate/OpenHatch.xml"] # >> ["hatch-pic", "SYSTEM", "../grafix/OpenHatch.gif", "gif"]
instruction(name, instruction) -> ()
[permalink][rdoc]XML処理命令(PI)をパースしたときに呼び出されるコールバックメソッドです。
<?xml-stylesheet type="text/css" href="style.css"?>
というPIに対し
name: "xml-stylesheet" instruction: " type=\"text/css\" href=\"style.css\""
という引数が渡されます。
notationdecl(content) -> ()
[permalink][rdoc]DTDの記法宣言をパースしたときに呼び出されるコールバックメソッドです。
tag_end(name) -> ()
[permalink][rdoc]終了タグをパースしたときに呼び出されるコールバックメソッドです。
</tag>
という終了タグに対し、
name: "tag"
という引数が渡されます。
tag_start(name, attrs) -> ()
[permalink][rdoc]開始タグをパースしたとき に呼び出されるコールバックメソッドです。
<tag attr1="value1" attr2="value2">
という開始タグに対し、
name: "tag" attrs: {"attr1" => "value1", "attr2" => "value2"}
という引数が渡されます。
text(text) -> ()
[permalink][rdoc]XML文書内のテキストをパースしたときに呼び出されるコールバックメソッドです。
xmldecl(version, encoding, standalone) -> ()
[permalink][rdoc]XML宣言をパースしたときに呼び出されるコールバックメソッドです。
version, encoding, standalone はXML宣言内で 対応する構成要素が省略されている場合には nil が渡されます。
<?xml version="1.0" encoding="utf-8"?>
というXML宣言に対しては
version: "1.0" encoding: "utf-8" standalone: nil
という引数が渡されます。