読者です 読者をやめる 読者になる 読者になる

XMLの要素に大なり小なり記号が入っている場合の対処

某社のAPIから情報を受け取るためのプログラムを書いていたのですが
解析が上手くいかなくて、悩んだので対応をメモ
 
最初、XML::Simpleでパースをしようとしましたが、なぜかパース結果の
ハッシュリファレンスの構造が崩れてました。。
XMLが結構でかくて調べるのがめんどくさかったので
XML::TreePPでパースしてみたのでしたが、今度は落やがりました・・・
(何も対策してないので当たり前の結果ではありますが)
 
しょうがないので調べてみると要素の中に「<」「>」やらうんこな記号が入ってるせいでした。
いったいこの駄目なAPIを使っている他の人間はどう回避してるのか・・と悩むこと小一時間

結局あやしげな文字が入る要素に↓の正規表現をかける事で記号を排除することに成功しました。
eオプション(マッチ結果を再度正規表現にかける)が素敵な感じです。

$hoge =~ s/(promotionName\>)(.*)(\<\/promotionName)/my $t1 = $1;my $t2 = $2;my $t3 = $3;$t2 =~ s!<|>!!g;$t1.$t2.$t3;/eg;

まぁ基本は要素の記号をエスケープするのが正しい対処なんだろな