2012-02-09 14 views
0

XMLファイルを解析し、いくつかの冗長要素を削除し、残りを$xml->print_to_file();を使用して新しいXMLファイルに書き戻す小さなスクリプトを作成しました。Perl XML :: Twigは二重引用符をエスケープしません

"でエスケープされたタグのテキスト内の二重引用符が通常の二重引用符になります。この動作を防ぐために、escape_gtに似た設定が見つかりませんでした。そのような設定や二重引用符をエスケープするための他の方法はありますか?

私の小枝の設定は次のようになります。

my $xml = XML::Twig->new(
    twig_handlers => { 
     label => \&purge_file 
    }, 
    pretty_print => 'indented', 
    output_encoding => 'utf-8', 
    escape_gt => 1 
); 
+0

なぜ重要ですか?二重引用符 '' 'と' " 'で区切られた内側の属性値を除いて、まったく同じことを意味します(これを行うには500%以上のバイトを要します)。 – Quentin

+1

二重引用符もエスケープする必要もありません。属性値の二重引用符をエスケープする必要がある_if_属性値は二重引用符で囲まれ、aの後に来る場合はより大きく]]: ']]>'はCDATAセクション区切り文字の終わりであり、他のすべての場合 – mirod

答えて

7

XMLテキスト内の引用符をエスケープする理由はありません。二重引用符は二重引用符で囲まれた属性値でエスケープする必要があります。XML :: Twigがそれらをエスケープすることがわかります。


...しかし、それはXMLでいじくるすることにより可能である::小枝の根性:

XML::Twig::Elt::set_replaced_ents(qq{&<>"}); # "&" needs to be first. 

私はこれに反対をお勧めします。

+0

ああ、場合によっては問題になると思っていた...とにかくありがとう – Demnogonis

+1

解決策をとにかく含めるように答えが更新されました – ikegami

+1

私もこれに反対します! – mirod