これはそのままの状況です:
XML API からデータを受信しています。このデータには特殊なアポストロフィ文字が含まれている場合があり、パーサーがクラッシュします。このクラッシュは、ローカル ファイルからデータを読み取ったときにのみ発生します。ストリームからデータを読み取るときにクラッシュはありませんが、DOM ツリーも取得しません。通知せずに終了します。
以下に、物事を機能させるために行った試みのリストを示します。
// Does not work
var web = new WebClient();
web.Encoding = Encoding.UTF8;
var response = web.DownloadString("http://thetvdb.com/api/apikey/series/" + show.TVDBID + "/");
var tree = XDocument.Parse(response);
// Works
var doc = new XmlDocument();
doc.Load("C:\\Test\\test.xml");
var response = doc.InnerXml;
var tree = XDocument.Parse(response);
// Works
var xmlDoc = XDocument.Parse(File.ReadAllText("c:\\Test\\test.xml", System.Text.Encoding.UTF8));
var xmlDoc = XDocument.Load("C:\\Test\\test.xml");
var tree = xmlDoc;
// Does not work
var web = new WebClient();
web.Encoding = Encoding.UTF8;
web.DownloadFile("http://thetvdb.com/api/apikey/series/" + show.TVDBID + "/", "C:\\test.xml");
var tree = XDocument.Load("C:\\test.xml");
// Does not work
var web = new WebClient();
web.Encoding = Encoding.UTF8;
var data = web.DownloadData("http://thetvdb.com/api/apikey/series/" + show.TVDBID + "/");
var response = Encoding.UTF8.GetString(data);
var tree = XDocument.Parse(response);
このループの最初の行のブレークポイントに到達するかどうかによって、何かが機能するかどうかを判断します。
if (root != null) {
var lastupdate = root.Element("Series").Element("lastupdated").Value;
foreach (var epi in tree.Descendants("Episode")) {
var season = epi.Element("SeasonNumber").Value; // Breakpoint here
}
}
パーサーがこのアポストロフィに遭遇すると、クラッシュが発生します。
この文字を自分で手動で入力したアポストロフィまたは に置き換えると'
、エラーはスローされなくなり、次の文字まで続きます。firefox と chrome で API リクエストのソース ページを表示すると、エンコーディングが UTF-8 であり、API wiki のコード例でもヘッダーに UTF-8 が表示されていることがわかります。
これが私がこれまでのところです。何か案は?
<Series></Series>
API クエリからの結果文字列には、デバッグ中に XML/Text/HTML ビジュアライザーによるタグのみが含まれており、何も含まれていないことに気付き<Episode></Episode>
ました。ただし、ブラウザで同じクエリを実行すると、両方が表示されます。これは可能ですか?Postman を通して見ると、エピソードが表示されます。
アップデート:
エンコーディングとして Unicode を使用すると、警告は表示されず、ローカルの xml ファイルを完全に解析できます。私はエンコーディングの専門家ではありませんが、Unicode を使用することの欠点はありますか?
データのストリームに Unicode を使用すると、アジアの文字が大量に表示されます。