Получите XML с HttpWebRequest в Windows Phone - PullRequest
3 голосов
/ 25 февраля 2012

Я использую 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»?Кто-нибудь может помочь?

Спасибо.

enter image description here

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:

enter image description here

1 Ответ

0 голосов
/ 25 февраля 2012

ИМО в этом конкретном сценарии использует регулярное выражение, например "^ [^ <] *" в </p>

String result = Regex.Replace(htmlDocument, @"^[^<]*", System.String.Empty, RegexOptions.Singleline);

, чтобы удалить предшествующие символы мусора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...