2012-01-24 5 views
1

私はXML解析で返されたデータから特定の文字値をエスケープする必要があります。問題は、私はXML解析ですべての値をチェックする必要があることです。私は以下の持っている場合たとえば、:PerlでXMLを解析する::シンプルでエスケープ文字を追加する

<data>this is sample data"</data> 

を私は値が$ xに格納されている、と私は$ Xを印刷している場合ように、二重引用符の値の前にエスケープ文字を追加できるようにする必要があります

this is sample data\" 

ありがとうございました。

+0

私はXML :: Simple parsingで設定できるフラグがある場合、自動的にこれらの値にエスケープ文字を追加します。 – srowley

+1

srowley - あなたが言った変換は、XML :: Simpleの非常に重要なものであり、 "///"演算子を使用すると非常に簡単です。この質問をする必要があると示唆しています。なぜこのエスケープをしたいのですか? – zgpmax

答えて

0

XML::Simpleは、XMLエスケープ内でエンティティを使用しているため、二重引用符は&quot;と表示されます。

Perl組み込み関数quotemetaは、あなたが望むものかもしれません。英数字でもアンダースコアでもないものはすべてエスケープします。

print quotemeta q/this is sample data"/; 

OUTPUT

this\ is\ sample\ data\" 
2

これはXML、構文解析、またはそれらの組み合わせとは何の関係もありません。あなたはあなたがちょうど特定逃げることができるquotemeta

my $s = 'this is sample data"'; 
my $escaped = quotemeta($s); 

を使用して

this is sample data\" 

あなたはすべての非単語の文字をエスケープすることができますが含まれているために、その変数を変更したい

this is sample data" 

を含む変数を持っています文字(例:\")を使用します。

my $s = 'this is sample data"'; 
(my $escaped = $s) =~ s/(?=[\\"])/\\/g; 

のPerl 5.14+:

my $s = 'this is sample data"'; 
my $escaped = $s =~ s/(?=[\\"])/\\/rg; 
2

XML::Simpleはperldocから:

デフォルトでは、 "XMLout()" 文字 '<' 翻訳します、 '>'、 ' & 'および ' ''〜&lt;,&gt;,&amp;および&quot;

ハッシュリファレンスからXMLストリングに変換する際に、これらの文字を有効なXMLとして正しくエスケープしたい場合はXMLをファイルに書き出す前に)何も変更する必要はありません。 XML文字列に変換するときに、あなたが他の方法でこれらの文字をエスケープしたい場合

、あなたがXML::Simpleを拡張し、escape_value()メソッドをオーバーライドする必要があります(バックスラッシュは、XMLでこれらの文字をエスケープするための適切な方法ではないことに注意してください)。

XMLin()によって生成されたハッシュリファレンス内のスカラー値の内容を何らかの理由でエスケープしたい場合は、他の答えがそのジョブを行います。

関連する問題