- ベストアンサー
print文で&(半角)文字のエラーを解消するには
よろしくお願いいたします。 Perlのprint文で、&(半角の&)文字を含む 文字列を、テキストファイルに出力しようとすると、 ”undeclared entity[Ln: 37, Col: 22]” という、その&文字の箇所で、 エラーが出て、強制終了されてしまい、 そこまで(途中まで)しか、テキストファイルに出力されません。 どうすれば、Perlで、 &(半角の&)文字を含む文字列を、 テキストファイルに出力出来るようになるのかを 教えてください。 どうぞよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
これは、perlの問題ではなく、出力結果がどう解釈されるか、の問題です。 perlから&を出力するなら、普通に print "&"で問題ありません。 「テキストファイル」と言いながら、実際にはXMLであり、XMLの文法として &で始まる実体参照だと解釈され、処理しようとしら定義されていないのでエラーになった、というのが今回の現象です。 「Perlから」とかは関係なしに、「XMLとして正しい出力」を考え、その通りになるように「Perlのプログラムを作る」のが正解でしょう。 タグの中身をs/&/&/gとでもやって全部置き換えるとか、XML関係のモジュールを使うとか。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
あ, #1 に追加です. 可能ならプログラムも出してください.
お礼
「Tacosan」様 私がPerlやXMLの初心者で、質問の仕方が不明瞭で ご迷惑をおかけいたしましたが、 いろいろとありがとうございました。
補足
ありがとうございます。 #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"; です。 以上になります。 よろしくお願いいたします。
- sendaifuji
- ベストアンサー率32% (90/281)
半角の&を表示するには「&」 半角の空白を入れるには「 」 「」の中の文字を入れれば表示されます。
お礼
「sendaifuji」様 私がPerlやXMLの初心者で、不明瞭な質問の仕方になってしまい、 ご迷惑をおかけいたしましたが、おかげさまで問題解決致しました。 ご回答いただきまして、本当にありがとうございました。
補足
ご回答ありがとうございます。 もし情報をお持ちでしたら、ぜひあわせて教えてください。 ご回答を当てはめて検討したところ、 print文で出力する直前に、 出力対象の文字列全体に対して、 Perl上で"&"文字が存在するか? を何らかの方法でチェックして、 もし"&"文字が存在したら、 出力対象の文字列全体における、 "&"文字の前箇所と、 "&"文字と、 "&"文字の後箇所の3か所にそれぞれ分割して、 "&"文字の箇所のみを、 print $writefilehandle "&"; みたいに固定で出力すればよいと判断致しました。 しかし上記いたしましたように、大変冗長な為、 もっとシンプルに対応する方法などございましたら、 ぜひ教えてください。 よろしくお願いいたします。
- Tacosan
- ベストアンサー率23% (3656/15482)
どんな文字列なのか, 具体的に出すことはできますか?
お礼
「kmee」様 私がPerlやXMLの初心者で、質問の仕方が不明瞭で ご迷惑をおかけいたしましたが、 ご回答いただきました内容で、 さっそく試したところ正常に動きました。 ご回答いただきまして、本当にありがとうございました。