Я использую httpwebrequest для извлечения некоторого XML-документа, код выглядит следующим образом.Когда я звоню
HttpGetMethod http = new HttpGetMethod();
http.Request("http://sample.com/xml.php");
Он работает нормально, тогда я использую
XDocument document = XDocument.Parse(xml);
XElement element = document.Element("statuses");
IEnumerable<XElement> statusesElements = element.Elements("status");
foreach (var elx in statusesElements)
{}
для анализа XML-документа.Но иногда возникает исключение, а затем я обнаружил, что возвращенная строка XML содержит «e48» (я использую Fiddler, чтобы найти возвращенную строку XML), как показано на рис.Но я не могу понять причину, это так странно, что за «е48»?Кто-нибудь может помочь?
Спасибо.
public class HttpGetMethod
{
public WebCallBack CallBack;
public void Request(string url)
{
var request = (HttpWebRequest)HttpWebRequest.Create(url);
IAsyncResult result = null;
result = (IAsyncResult)request.BeginGetResponse(ResponseCallback, request);
}
private void ResponseCallback(IAsyncResult result)
{
try
{
var request = (HttpWebRequest)result.AsyncState;
var response = request.EndGetResponse(result);
using (var stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
if (CallBack != null)
{
var str = reader.ReadToEnd();
CallBack(str);
}
}
}
}
catch (Exception ex)
{
Deployment.Current.Dispatcher.BeginInvoke(delegate
{
CallBack(ex.ToString());
});
}
}
}
Вывод отладки:
A first chance exception of type 'System.Xml.XmlException' occurred in System.Xml.dll
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
System.Xml.XmlException: '', hexadecimal value 0x0C, is an invalid character. Line 897, position 14.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(Int32 res, String resString, String[] args)
at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, Int32 res, String resString, String[] args)
at System.Xml.XmlTextReaderImpl.ThrowInvalidChar(Char[] data, Int32 length, Int32 invCharPos)
at System.Xml.XmlTextReaderImpl.ParseCDataOrComment(XmlNodeType type, Int32& outStartPos, Int32& outEndPos)
at System.Xml.XmlTextReaderImpl.ParseCDataOrComment(XmlNodeType type)
at System.Xml.XmlTextReaderImpl.ParseCData()
at System.Xml.XmlTextReaderImpl.Parse
Вот необработанный ответ ih Fiddle: