【もしも】取得した商品XMLデータが壊れてます

開発ざれごとCSV,webapi,xml,エクスポーター,エラー,もしもAPI

sc20120127185217

以前からある一部のカテゴリで、なんでか、XMLパースエラーになっていたので、調べてみました。

エラーのあるXML文書をファイル化して開いてみると、確かに他ソフトのパースでもエラーになります(写真は、Chrome)

文字コード0x03が含まれているとの事。

sc20120127185447テキストエディタで開いたら、確かに0x03が文字列中に存在してました。


0x03ってなんだ?と思って調べたら、ETXテキスト終了というコード。過去の遺物ですよね。なんで、こんなのが入ってるんだ?

うむむ、XML文書で許されるのか?いまさらXML仕様書眺める訳にもいかんし・・。

メンドイが、APIからXML取得後、こういった文字コードを破棄するコードを仲介させなきゃならない(´・ω・`)

//xd.Load(wc.OpenRead(clsCommon.c_moshimo_api_item2));
wc.Encoding = Encoding.GetEncoding("utf-8");
string strXML = wc.DownloadString(clsCommon.c_moshimo_api_item2);
strXML = Regex.Replace(strXML, @"[u0000-u0008]", "", RegexOptions.Compiled | RegexOptions.Singleline);
xd.Load(new StringReader(strXML));

そういや以前RSSリーダー作った時も、XMLの壊れって結構見かけました。本文のところは、どこからか持ってきて(そのまま)生成しているパターンが多いからなんでしょうねぇ。

やばそうな制御文字は他にもありそうですが、一応0x00-0x08まで破棄。string.replaceでも良かったんですが、今後個数が多くなった時のために、regexにて処理。こんな事するだけに、リソース食い過ぎか・・?うむ

1行で綺麗に済むはずだったんですが、4行に。

追記:

と思ってデータを取得しまくってたら、0x0Bも登場しやがった。これは本気で取り組まないと・・