• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SAXのcharacters()内で得る値について)

XMLファイルをPerlで読み込む際のエラーについて

このQ&Aのポイント
  • XMLファイルをPerlで読み込んだ際に、特定の文字列がエラーを引き起こす場合があります。
  • このエラーは、XML内に存在する特定の文字列が正しく変換されないために発生します。
  • エラーを解消するためには、XMLの文字列を適切にエスケープするか、文字列の変換処理を改善する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • dscripty
  • ベストアンサー率51% (166/325)
回答No.3

external の entity は ハンドラ実装しろって、ドキュメントにかいてあったよ? メモしてないから場所はしめせないけど。。。

hohoemikun
質問者

お礼

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

その他の回答 (2)

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

最低限必要な情報を書いておくね。 Perl::SAX のバージョン。 XML の Valid 確認で使用したツール、とバージョン。 xml宣言からルート要素までの文字列。 エラーがでた要素の開始タグから終了タグまで全部。 実装した、ハンドラのリスト。 以上! ちなみに Perl::SAX 2.1 の既知のバグには、それっぽいのはなっかたよ?

hohoemikun
質問者

お礼

「dscripty」様 お世話になっております。 エラー複数行のうち、一番下行の、 Undeclared entity [Ln: 516, Col: 21] だけは、 &文字を、&文字列に正規表現で、 XMLファイル内を全て置き換えてから SAXを実行したら解消していました。 ただし、 エラー複数行のうち、一番下行以外の複数エラー行は、 いまだにエラーのままです。 さしあたってご報告と御礼まで。 なお、エラー複数行のうち、一番下行以外の複数エラー行については、 引き続き、質問中ですので、 よろしくお願いします。

hohoemikun
質問者

補足

「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() 以上になります。 よろしくお願いします。

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.1

xml宣言から、ルート要素までの文字列と、 & でエラーがでた所の要素全部みないと、なんとも言いようがないかな? 既知のバグでもあるならべつだけど。 ちなみに、XML は Valid だよね。一応確認だけど。。。 「Undeclared entity」って描いてあるから、たぶんだけど、 HTML でつかえるからって、宣言してないエンティティー使っちゃってるとか?

hohoemikun
質問者

補足

ご回答ありがとうございます。 「妥当なXML」です。 その後、試しに&をすべて削ってみたところ、 最後まで正常に動作はしています。 それでエラー複数行のうち、 一番下行だけは消えましたが、 それ以外の上行複数のエラーは、 残ったままです。 宣言してないエンティティーを使っていないか? 確認いたしましたが、とくに使っていませんでした。 ところで私が質問時に情報として記述し忘れていましたが、 XMLファイルの文字エンコードはUTF-8を利用しています。 以上になります。 アドバイスやヒントだけでも構いませんので、 何か思い当たることがございましたら、 よろしくお願いします。