xmlscan は Ruby だけで書かれた non-validating XML parser です。
次のような特長があります。
デフォルトでは、xmlscan がどの CES (Character Encoding Scheme) で XML文書を解析するかはグローバル変数 $KCODE の値によって決まります。 EUC-*, Shift_JIS, UTF-8 で書かれたXML文書を解析するには $KCODE や XMLScan::XMLScanner#kcode= に適切な値を設定する必要があります。
UTF-16 は直接サポートしていません。解析前に一旦 UTF-8 に変換する 必要があります。
XML名前空間は xmlscan/namespace.rb で実装されていますが、インターフェースを 大きく変更する予定があるため undocumented とします。
xmlscan に関する全ての例外のスーパークラス。
これらの例外は、XMLScan::Visitor のインスタンスが、XMLScan::XMLScanner や XMLScan::XMLParser からエラー報告を受け取ったときに、デフォルトで発生させる ものです。各パーサが直接これらの例外を投げることはありません。
XML文書の解析結果を受け取るための Mix-in です。
xmlscan に含まれる各 parser は、文書の先頭から構文解析を行い、タグ等の 構文要素を見つけるたびに、パーサに与えられた XMLScan::Visitor の インスタンスの特定のメソッドを呼び出します。この呼び出しは、必ず文書の 先頭から順番に行われます。
特に記述の無い限り、各メソッドはデフォルトでは何もしません。
XMLScan::Visitor#parse_error(msg)
XMLScan::Visitor#wellformed_error(msg)
XMLScan::Visitor#valid_error(msg)
妥当性制約違反を発見した場合に呼び出されます。デフォルトでは XMLScan::NotValidError例外を発生させます。例外処理等の 大域脱出を行わずに普通に制御をパーサに返すと、パーサはエラーを 回復して解析を続けます。
なお、現在の xmlscan には妥当性を検証するXMLプロセサは 含まれていません。このメソッドは将来の版のために予約されています。
XMLScan::Visitor#warning(msg)
XMLScan::Visitor#on_start_document
XMLScan::Visitor#on_end_document
XMLScan::Visitor#on_xmldecl
XMLScan::Visitor#on_xmldecl_version(str)
XMLScan::Visitor#on_xmldecl_encoding(str)
XMLScan::Visitor#on_xmldecl_standalone(str)
XMLScan::Visitor#on_xmldecl_other(name, value)
XMLScan::Visitor#on_xmldecl_end
XML宣言を発見した場合に呼び出されます。
<?xml version="1.0" encoding="euc-jp" standalone="yes" ?> ^ ^ ^ ^ ^ 1 2 3 4 5 method argument -------------------------------------- 1: on_xmldecl 2: on_xmldecl_version ("1.0") 3: on_xmldecl_encoding ("euc-jp") 4: on_xmldecl_standalone ("yes") 5: on_xmldecl_end
XML宣言を発見した場合、on_xmldecl と on_xmldecl_end は必ず 呼び出されます。他のメソッドは対応する構文がXML宣言中に 現れなかった場合は呼び出されません。
on_xmldecl_other は version, encoding, standalone 以外の宣言が XML宣言の中にあった場合に呼び出されます。そのような宣言は構文上 許されていないため、on_xmldecl_other が呼び出される前には必ず XMLScan::Visitor#parse_error メソッドが呼び出されることに 注意して下さい。
XMLScan::Visitor#on_doctype(root, pubid, sysid)
文書型宣言を発見した場合に呼び出されます。
document argument
-------------------------------------------------------------- 1: <!DOCTYPE foo> ('foo', nil, nil) 2: <!DOCTYPE foo SYSTEM "bar"> ('foo', nil, 'bar') 3: <!DOCTYPE foo PUBLIC "bar"> ('foo', 'bar', nil ) 4: <!DOCTYPE foo PUBLIC "bar" "baz"> ('foo', 'bar', 'baz')
XMLScan::Visitor#on_prolog_space(str)
XMLScan::Visitor#on_comment(str)
XMLScan::Visitor#on_pi(target, pi)
XMLScan::Visitor#on_chardata(str)
XMLScan::Visitor#on_cdata(str)
XMLScan::Visitor#on_entityref(ref)
XMLScan::Visitor#on_charref(code)
XMLScan::Visitor#on_charref_hex(code)
XMLScan::Visitor#on_stag(name)
XMLScan::Visitor#on_attribute(name)
XMLScan::Visitor#on_attr_value(str)
XMLScan::Visitor#on_attr_entityref(ref)
XMLScan::Visitor#on_attr_charref(code)
XMLScan::Visitor#on_attr_charref_hex(code)
XMLScan::Visitor#on_attribute_end(name)
XMLScan::Visitor#on_stag_end_empty(name)
XMLScan::Visitor#on_stag_end(name)
開始タグを発見した場合に呼び出されます。
<hoge fuga="foo&bar;&&baz" > ^ ^ ^ ^ ^ ^ ^ ^ ^ 1 2 3 4 5 6 7 8 9 method argument ------------------------------------ 1: on_stag ('hoge') 2: on_attribute ('fuga') 3: on_attr_value ('foo') 4: on_attr_entityref ('bar') 5: on_attr_charref (38) 6: on_attr_charref_hex (38) 7: on_attr_value ('baz') 8: on_attribute_end ('fuga') 9: on_stag_end ('hoge') or on_stag_end_empty ('hoge')
開始タグを発見した場合、on_stag と、対応する on_stag_end 又は on_stag_end_empty は必ず呼び出されます。他のメソッドは、開始タグの 中に属性が現れなかった場合は呼び出されません。
属性を発見した場合、on_attribute と on_attribute_end は必ず 呼び出されます。属性値が空 (fuga="") の時は、この2つのメソッドのみが 呼び出されます。
on_attr_entityref は属性値の中で一般実体参照を発見した場合に 呼び出されます。on_charref 及び on_charref_hex は属性値の中で 文字参照を発見した場合に呼び出されます。
タグが空要素タグだった場合は、on_stag_end メソッドの代わりに on_stag_end_empty メソッドが呼び出されます。
XMLScan::Visitor#on_etag(name)
XML文書を字句解析し、タグ等を認識するスキャナです。
XMLScan::XMLScanner の規格適合性については、他の文書で述べています。
XMLScan::XMLScanner.new(visitor[, option ...])
XMLScan::XMLScanner オブジェクトを生成します。visitorは XMLScan::Visitor のインスタンスで、XMLScan::XMLScanner オブジェクトから 解析結果を受け取ります。
optionは文字列又はシンボルで指定します。optionには 次のものがあります。
require 'xmlscan/xmlchar'
すると指定できるようになります。
不正な文字が使われていないかどうかのチェックを行います。
パフォーマンスが著しく低下します。
XMLScan::XMLScanner#kcode= arg
XMLScan::XMLScanner#kcode
XMLScan::XMLScanner#parse(source)
妥当性を検証しない XML parser です。
XMLScan::XMLParser の規格適合性については、他の文書で述べています。
XMLScan::XMLParser.new(visitor[, option ...])
XMLScan::XMLParser オブジェクトはvisitorの各メソッドについて、 次のことを保証します。
加えて、エラー回復を行わなければ、整形式のXML文書では起こり得ない メソッド呼び出しは全て抑制されます。
XMLScan::XMLScanner を元にした HTML パーサです。
XMLScan::HTMLScanner の規格適合性については、他の文書で述べています。
XMLScan::HTMLScanner.new(visitor[, option ...])