module REXML::StreamListener

要約

REXML::Parsers::StreamParser で使われるコールバックオブジェクトのためのモジュールです。

このモジュールを include して、各メソッドを適切にオーバーライドしたクラスのインスタンスを REXML::Parsers::StreamParser.newREXML::Document.parse_stream の引数として渡します。

このモジュールで定義されているメソッド自体は何もしません。コールバックのデフォルト動作(何もしない)を定義しているだけです。

詳しい用例などについては REXML::Parsers::StreamParser を見てください。

目次

インスタンスメソッド

インスタンスメソッド

attlistdecl(element_name, attributes, raw_content) -> ()[permalink][rdoc]

DTDの属性リスト宣言をパースしたときに呼び出されるコールバックです。

[PARAM] element_name:
要素名が文字列で渡されます
[PARAM] attributes:
属性名とそのデフォルト値の対応が { 属性名文字列 => デフォルト値文字列(無ければnil) } というハッシュテーブルで渡されます
[PARAM] raw_content:
文書内の属性リスト宣言の文字列がそのまま渡されます

<!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 セクションをパースしたときに呼び出されるコールバックメソッドです。

[PARAM] content:
CDATAセクションの内容の文字列が渡されます

<![CDATA[ xyz ]]>

というCDATAセクションに対しては

content: " xyz "

という引数が渡されます。

comment(comment) -> ()[permalink][rdoc]

XML文書内のコメントをパースしたときに呼び出されるコールバックメソッドです。

[PARAM] comment:
コメントの内容が文字列で渡されます
doctype(name, pub_sys, long_name, uri) -> ()[permalink][rdoc]

文書型宣言(DTD)をパースしたときに呼び出されるコールバックメソッドです。

pub_sys, long_name, uri はDTDが内部サブセットのみを利用している場合には nil が渡されます。

[PARAM] name:
宣言されているルート要素名が文字列で渡されます。
[PARAM] pub_sys:
"PUBLIC" もしくは "SYSTEM" が渡されます。nilが渡される場合もあります。
[PARAM] long_name:
"SYSTEM" の場合はシステム識別子が、"PUBLIC"の場合は公開識別子が文字列で渡されます
[PARAM] uri:
"SYSTEM" の場合は nil が、"PUBLIC" の場合はシステム識別子が渡されます

<!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の要素型宣言をパースしたときに呼び出されるコールバックメソッドです。

[PARAM] content:
要素型宣言が文字列として渡されます。

<!ELEMENT root (a+)>

という属性型宣言に対しては

content: "<!ELEMENT root (a+)"

という引数が渡されます。

entity(content) -> ()[permalink][rdoc]

DTD内で、パラメータ実体参照(%entityname;)が現れたときに呼び出されるコールバックメソッドです。

DTDの各宣言(要素型宣言や実体参照宣言)の内側で使われた場合はこのメソッドはコールバックされません。各宣言のためのコールバックメソッド (REXML::StreamListener#elementdeclREXML::StreamListener#entitydecl など) の引数の一部として渡されます。

2.0.0 以前ではこのメソッドはコールバックされないことに注意してください。

[PARAM] content:
参照名が文字列で渡されます。
entitydecl(content) -> ()[permalink][rdoc]

DTDの実体宣言をパースしたときに呼び出されるコールバックメソッドです。

[PARAM] content:
実体宣言が配列で渡されます

実体宣言の書き方によって 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)をパースしたときに呼び出されるコールバックメソッドです。

[PARAM] name:
ターゲット名が文字列で渡されます
[PARAM] instruction:
処理命令の内容が文字列で渡されます

<?xml-stylesheet type="text/css" href="style.css"?>

というPIに対し

name: "xml-stylesheet"
instruction: " type=\"text/css\" href=\"style.css\""

という引数が渡されます。

notationdecl(content) -> ()[permalink][rdoc]

DTDの記法宣言をパースしたときに呼び出されるコールバックメソッドです。

[PARAM] content:
記法宣言が [記法名文字列, 種別("PUBLIC" もしくは "SYSTEM"), 公開識別子文字列, URI文字列] という配列で渡されます。
tag_end(name) -> ()[permalink][rdoc]

終了タグをパースしたときに呼び出されるコールバックメソッドです。

[PARAM] name:
タグ名が文字列で渡されます

</tag>

という終了タグに対し、

name: "tag"

という引数が渡されます。

tag_start(name, attrs) -> ()[permalink][rdoc]

開始タグをパースしたときに呼び出されるコールバックメソッドです。

[PARAM] name:
タグ名が文字列で渡されます
[PARAM] attrs:
タグの属性が"属性名" => "属性値"という Hash で渡されます

<tag attr1="value1" attr2="value2">

という開始タグに対し、

name: "tag"
attrs: {"attr1" => "value1", "attr2" => "value2"}

という引数が渡されます。

text(text) -> ()[permalink][rdoc]

XML文書内のテキストをパースしたときに呼び出されるコールバックメソッドです。

[PARAM] text:
テキストが文字列で渡されます
xmldecl(version, encoding, standalone) -> ()[permalink][rdoc]

XML宣言をパースしたときに呼び出されるコールバックメソッドです。

version, encoding, standalone はXML宣言内で対応する構成要素が省略されている場合には nil が渡されます。

[PARAM] version:
宣言されているバージョンが文字列で渡されます。
[PARAM] encoding:
宣言されているエンコーディングが文字列で渡されます。
[PARAM] standalone:
スタンドアロン文書であるかどうかが "yes" "no" で渡されます

<?xml version="1.0" encoding="utf-8"?>

というXML宣言に対しては

version: "1.0"
encoding: "utf-8"
standalone: nil

という引数が渡されます。