为什么 XDocument.Parse 会抛出 NotSupportedException? [英] Why does XDocument.Parse throw NotSupportedException?
问题描述
我正在尝试使用 XDocument.Parse 解析 xml 数据 wchich 抛出 NotSupportedException,就像在主题中一样:Windows Phone 7 中的 XDocument.Parse 是否不同? 我根据发布的建议更新了我的代码,但它仍然没有帮助.前段时间我使用类似(但更简单)的方法解析 RSS,效果很好.
I am trying to parse xml data using XDocument.Parse wchich throws NotSupportedException, just like in topic: Is XDocument.Parse different in Windows Phone 7? and I updated my code according to posted advice, but it still doesn't help. Some time ago I parsed RSS using similar (but simpler) method and that worked just fine.
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 代替
When I substitute string s for
//string s = "<select name="SearchString"><option value="308">10 Things I Hate About You</option><option value="539">2 Broke Girls</option></select>";
一切正常,没有抛出异常,那么我做错了什么?
Everything works and no exception is thrown, so what do I do wrong?
推荐答案
有像‘&’这样的特殊符号在 e.Result
.
There are special symbols like '&' in e.Result
.
我只是尝试用 HttpUtility.HtmlEncode()
和 XDocument
解析它
I just tried replace this symbols (all except '<', '>', '"') with HttpUtility.HtmlEncode()
and XDocument
parsed it
更新:
我不想展示我的代码,但你没有给我机会:)
I didn't want to show my code, but you left me no chance :)
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 转换.我写得很快,只是为了测试目的
It's work for me on WP7. Please, do not use this code for html conversion. I wrote it quickly just for test purposes
这篇关于为什么 XDocument.Parse 会抛出 NotSupportedException?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!