• ベストアンサー

print文で&(半角)文字のエラーを解消するには

よろしくお願いいたします。 Perlのprint文で、&(半角の&)文字を含む 文字列を、テキストファイルに出力しようとすると、 ”undeclared entity[Ln: 37, Col: 22]” という、その&文字の箇所で、 エラーが出て、強制終了されてしまい、 そこまで(途中まで)しか、テキストファイルに出力されません。 どうすれば、Perlで、 &(半角の&)文字を含む文字列を、 テキストファイルに出力出来るようになるのかを 教えてください。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

これは、perlの問題ではなく、出力結果がどう解釈されるか、の問題です。 perlから&を出力するなら、普通に print "&"で問題ありません。 「テキストファイル」と言いながら、実際にはXMLであり、XMLの文法として &で始まる実体参照だと解釈され、処理しようとしら定義されていないのでエラーになった、というのが今回の現象です。 「Perlから」とかは関係なしに、「XMLとして正しい出力」を考え、その通りになるように「Perlのプログラムを作る」のが正解でしょう。 タグの中身をs/&/&/gとでもやって全部置き換えるとか、XML関係のモジュールを使うとか。

sublota22
質問者

お礼

「kmee」様 私がPerlやXMLの初心者で、質問の仕方が不明瞭で ご迷惑をおかけいたしましたが、 ご回答いただきました内容で、 さっそく試したところ正常に動きました。 ご回答いただきまして、本当にありがとうございました。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

あ, #1 に追加です. 可能ならプログラムも出してください.

sublota22
質問者

お礼

「Tacosan」様 私がPerlやXMLの初心者で、質問の仕方が不明瞭で ご迷惑をおかけいたしましたが、 いろいろとありがとうございました。

sublota22
質問者

補足

ありがとうございます。 #1は、 以下XMLファイル内の、&文字1つを含む文字列”Goagle&DEF123Site”になります。 (この&文字箇所でprint文出力時にエラーとなり強制終了しています) <?xml version="1.0" encoding="UTF-8"?> <orgsites> <orgsite> <name>Goagle&DEF123Site</name> <url>http://www.goagleSite.co.jp/</url> </orgsite> </orgsites> #3は、 単純なprint文で、 書込用ファイルハンドルに対して、 &文字1つを含む文字列をセットした、 print $writefilehandle "Goagle&DEF123Site"; です。 以上になります。 よろしくお願いいたします。

回答No.2

半角の&を表示するには「&amp;」 半角の空白を入れるには「&nbsp;」 「」の中の文字を入れれば表示されます。

sublota22
質問者

お礼

「sendaifuji」様 私がPerlやXMLの初心者で、不明瞭な質問の仕方になってしまい、 ご迷惑をおかけいたしましたが、おかげさまで問題解決致しました。 ご回答いただきまして、本当にありがとうございました。

sublota22
質問者

補足

ご回答ありがとうございます。 もし情報をお持ちでしたら、ぜひあわせて教えてください。 ご回答を当てはめて検討したところ、 print文で出力する直前に、 出力対象の文字列全体に対して、 Perl上で"&"文字が存在するか? を何らかの方法でチェックして、 もし"&"文字が存在したら、 出力対象の文字列全体における、 "&"文字の前箇所と、 "&"文字と、 "&"文字の後箇所の3か所にそれぞれ分割して、 "&"文字の箇所のみを、 print $writefilehandle "&amp;"; みたいに固定で出力すればよいと判断致しました。 しかし上記いたしましたように、大変冗長な為、 もっとシンプルに対応する方法などございましたら、 ぜひ教えてください。 よろしくお願いいたします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どんな文字列なのか, 具体的に出すことはできますか?

関連するQ&A

専門家に質問してみよう