Почему XDocument.Parse создает исключение NotSupportedException? - PullRequest
4 голосов
/ 06 января 2012

Я пытаюсь проанализировать данные XML с помощью XDocument.Parse, который выдает исключение NotSupportedException, как в теме: Отличается ли XDocument.Parse в Windows Phone 7? , и я обновил свой код в соответствии с опубликованным советом, но это все еще не помогает. Некоторое время назад я анализировал RSS, используя аналогичный (но более простой) метод, и это работало просто отлично.

public void sList()
        {

            WebClient client = new WebClient();

            client.Encoding = Encoding.UTF8;
            string url = "http://eztv.it";
            Uri u = new Uri(url);
            client.DownloadStringAsync(u);
            client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);


        }

    private void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        try
        {
            string s = e.Result;
            s = cut(s);

            XmlReaderSettings settings = new XmlReaderSettings();
            settings.DtdProcessing = DtdProcessing.Ignore;


            XDocument document = null;// XDocument.Parse(s);//Load(s);
            using (XmlReader reader = XmlReader.Create(new StringReader(e.Result), settings))
            {
                document = XDocument.Load(reader); // error thrown here
            }

            // ... rest of code
        }
        catch (Exception ex)
        {
            MessageBox.Show( ex.Message);
        }

    }

    string cut(string s)
    {
        int iod = s.IndexOf("<select name=\"SearchString\">");
        int ido = s.LastIndexOf("</select>");

        s = s.Substring(iod, ido - iod + 9);

        return s;
    }

Когда я заменяю строку s на

//string s = "<select name=\"SearchString\"><option value=\"308\">10 Things I Hate About You</option><option value=\"539\">2 Broke Girls</option></select>";

Все работает и никаких исключений не выдается, так что я делаю не так?

1 Ответ

6 голосов
/ 06 января 2012

В e.Result.

есть специальные символы, такие как '&'.

Я только что попытался заменить эти символы (все, кроме '<', '>', '"') на HttpUtility.HtmlEncode() и XDocument проанализировал его

UPD:

Я не хотел показывать свой код, но ты не оставил мне шансов:)

 string y = "";
 for (int i = 0; i < s.Length; i++)
 {
      if (s[i] == '<' || s[i] == '>' || s[i] == '"')
      {
           y += s[i];
      }
      else
      {
           y += HttpUtility.HtmlEncode(s[i].ToString());
      }
 }
 XDocument document = XDocument.Parse(y);
 var options = (from option in document.Descendants("option")
      select option.Value).ToList();

Это работа для меня на WP7. Пожалуйста, не используйте этот код для преобразования html . Я написал это быстро только для целей тестирования

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