いちばん失敗した人決定戦

XML(UTF-8)ファイルをPerlでOPENして読み込んで、
XML::SAXで、
characters()メソッド内で取得した文字列値を利用していますが、
XML内に&文字が存在していると、
そこで、

utf8 "\x81" does not map to Unicode at C:/Perl/site/lib/XML/SAX/PurePerl/Reader/
Stream.pm line 37.
utf8 "\x8C" does not map to Unicode at C:/Perl/site/lib/XML/SAX/PurePerl/Reader/
Stream.pm line 37.
Undeclared entity [Ln: 516, Col: 21]

エラーが出て強制終了されます。
どうすれば、このようなエラーを解消できますか?

A 回答 (3件)

external の entity は ハンドラ実装しろって、ドキュメントにかいてあったよ?



メモしてないから場所はしめせないけど。。。
    • good
    • 0
この回答へのお礼

「dscripty」様

お世話になっております。
おかげさまでご回答いただきましたように
対応致しましたところ、
無事にエラー解消致しました。
本当にありがとうございました。

お礼日時:2012/04/28 15:43

最低限必要な情報を書いておくね。



Perl::SAX のバージョン。

XML の Valid 確認で使用したツール、とバージョン。

xml宣言からルート要素までの文字列。

エラーがでた要素の開始タグから終了タグまで全部。

実装した、ハンドラのリスト。

以上!

ちなみに Perl::SAX 2.1 の既知のバグには、それっぽいのはなっかたよ?

この回答への補足

「dscripty」様

お世話になっております。
さっそくですが、
「最低限必要な情報」を今日調べた結果、
調べがついた範囲で一通り下記します。

(1)Perl::SAX のバージョン。
 ・XML-SAX 0.99
 ・XML-SAX-Base 1.08
 ・XML-SAX-ExpatXS 1.32
 ・XML-SAX-Writer 0.53

(2)XML の Valid 確認で使用したツール、とバージョン。
 ・xmllintツール
 ・バージョンを、xmlling --versionで調べたところ、
   ”using libxml version 20708”

(3)xml宣言からルート要素までの文字列。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE dictionary SYSTEM "sampledtd.dtd">

<dictionary>

(4)エラーがでた要素の開始タグから終了タグまで全部。
【すみません。
 質問時に記述したエラーメッセージ内容からは、
 どこの要素でエラーが発生しているか?
 判断がつきません。
 もし何か調べる方法などございましたら、
 ぜひ教えてください。よろしくお願いします】

(5)実装した、ハンドラのリスト。
use XML::SAX;

my $parserWk = XML::SAX::ParserFactory->parser( Handler => wkSAXHandler->new);
$parserWk->parse_uri($inFileNameWk);

start_element()
end_document()
start_element()
end_element()
characters()

以上になります。
よろしくお願いします。

補足日時:2012/04/28 10:25
    • good
    • 0
この回答へのお礼

「dscripty」様

お世話になっております。
エラー複数行のうち、一番下行の、
Undeclared entity [Ln: 516, Col: 21]
だけは、
&文字を、&amp;文字列に正規表現で、
XMLファイル内を全て置き換えてから
SAXを実行したら解消していました。

ただし、
エラー複数行のうち、一番下行以外の複数エラー行は、
いまだにエラーのままです。

さしあたってご報告と御礼まで。

なお、エラー複数行のうち、一番下行以外の複数エラー行については、
引き続き、質問中ですので、
よろしくお願いします。

お礼日時:2012/04/28 10:31

xml宣言から、ルート要素までの文字列と、



& でエラーがでた所の要素全部みないと、なんとも言いようがないかな?

既知のバグでもあるならべつだけど。

ちなみに、XML は Valid だよね。一応確認だけど。。。

「Undeclared entity」って描いてあるから、たぶんだけど、 HTML でつかえるからって、宣言してないエンティティー使っちゃってるとか?

この回答への補足

ご回答ありがとうございます。

「妥当なXML」です。
その後、試しに&をすべて削ってみたところ、
最後まで正常に動作はしています。
それでエラー複数行のうち、
一番下行だけは消えましたが、
それ以外の上行複数のエラーは、
残ったままです。

宣言してないエンティティーを使っていないか?
確認いたしましたが、とくに使っていませんでした。

ところで私が質問時に情報として記述し忘れていましたが、
XMLファイルの文字エンコードはUTF-8を利用しています。

以上になります。
アドバイスやヒントだけでも構いませんので、
何か思い当たることがございましたら、
よろしくお願いします。

補足日時:2012/04/27 18:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!