From: TAKAHASHI Masayoshi Date: 1999-09-14T21:10:15+09:00 Subject: [ruby-list:16780] Re: xml-parser example(xmlcheck.rb) error? 高橋征義です。 Hideto Ishibashi さん: > XMLParserに付属のexample/xmlcheck.rbの動作がおかしい様です。 結論から言うと、それはxmlcheck.rbの問題ではなくtmp.rbの問題でしょう。 # でもxmlcheck.rbもちょっとまずいかも。詳しくは後述。 > xmlcheck.rbに、おなじく付属のindex_euc.xmlをあたえると、 > >>well-formed > と出ます。 これは問題ありませんよね。 > ここで、index_euc.xmlの1行目、XML宣言を > " と変更します。そしてxmlcheck.rbにかけると、 > >>xmlcheck.rb:index_euc.xml:1:5:E: not well-formed > となります。後述のように、ここでの正規表現は/.../iのcase無視です。 XMLの仕様では、先頭の「 そこで、xmlcheck.rbの25行目を抜きだして、 > >>#!/usr/bin/ruby > >>while gets > >> print "well-formed\n" if ~ /^<\?xml\sversion=.+\sencoding=.EUC-JP./i > >>end > というファイルをtest.rbとします。 (略) > >>$ ruby test.rb test.xml > >>well-formed > >>$ > となりました。 ということなので、要するに「test.rbはXML文書がwell-formedかどうかを 正しく検証できてない」ということになります。 つけ加えておくと、例の25行目などは、parseに先立って「エンコーディング」 を調べるためのものです。だから、「well-formedかどうか」はここでは調べる 必要はありません(後で調べます)。 # ……でも、空白の処理が中途半端だったりしません? #「if xml =~ /^<\?xml\s+version.*=.+\sencoding.*=\s*.EUC-JP./i」 # というくらいの正規表現じゃないと、やたらに空白を入れたXML文書を # 解析できない気もします。 # あと、途中で改行が入る可能性もありますよね。 > あとはどなたか解決してください(^^;;;。 これで解決しましたでしょうか? :-) 高橋征義 (TAKAHASHI Masayoshi) Email:maki@inac.co.jp