電子書籍の厳選無料作品が豊富!

よろしくお願いいたします。

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

どうすれば、Perlで、
&(半角の&)文字を含む文字列を、
テキストファイルに出力出来るようになるのかを
教えてください。

どうぞよろしくお願いいたします。

A 回答 (4件)

これは、perlの問題ではなく、出力結果がどう解釈されるか、の問題です。



perlから&を出力するなら、普通に print "&"で問題ありません。

「テキストファイル」と言いながら、実際にはXMLであり、XMLの文法として &で始まる実体参照だと解釈され、処理しようとしら定義されていないのでエラーになった、というのが今回の現象です。

「Perlから」とかは関係なしに、「XMLとして正しい出力」を考え、その通りになるように「Perlのプログラムを作る」のが正解でしょう。
タグの中身をs/&/&/gとでもやって全部置き換えるとか、XML関係のモジュールを使うとか。
    • good
    • 0
この回答へのお礼

「kmee」様

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

お礼日時:2012/04/27 09:46

あ, #1 に追加です.



可能ならプログラムも出してください.

この回答への補足

ありがとうございます。
#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";
です。

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

補足日時:2012/04/26 18:41
    • good
    • 0
この回答へのお礼

「Tacosan」様

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

お礼日時:2012/04/27 09:47

半角の&を表示するには「&amp;」


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

この回答への補足

ご回答ありがとうございます。
もし情報をお持ちでしたら、ぜひあわせて教えてください。

ご回答を当てはめて検討したところ、
print文で出力する直前に、
出力対象の文字列全体に対して、
Perl上で"&"文字が存在するか?
を何らかの方法でチェックして、
もし"&"文字が存在したら、
出力対象の文字列全体における、
"&"文字の前箇所と、
"&"文字と、
"&"文字の後箇所の3か所にそれぞれ分割して、
"&"文字の箇所のみを、
print $writefilehandle "&amp;";
みたいに固定で出力すればよいと判断致しました。

しかし上記いたしましたように、大変冗長な為、
もっとシンプルに対応する方法などございましたら、
ぜひ教えてください。
よろしくお願いいたします。

補足日時:2012/04/26 18:32
    • good
    • 0
この回答へのお礼

「sendaifuji」様

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

お礼日時:2012/04/27 09:50

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

    • good
    • 0

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