错误在':'使用C#和XML(XDocument)

时间:2014-11-28 18:13:14

标签: c# xml

我正在尝试使用C#上的xml XDocument遇到问题并且无法想出有效的方法。

private void fillItems(string URL)
    {
        var webClient = new WebClient();
        string result = webClient.DownloadString(URL);
        XDocument reader = XDocument.Parse(result);

        items.Clear();

        foreach (var item in reader.Descendants("item"))
        {
            xmlItem temp = new xmlItem(item.Element("title").Value, (item.Element("torrent:magnetURI") != null ? item.Element("torrent:magnetURI").Value:"(no uri)"));
            items.Add(temp);
        }
        updateList();
    }

" torrent:magnetURI"提出一个问题,说明':'不允许(在运行时),我无法取消':'在完整的结果字符串中,因为一些数据丢失了......

非常感谢任何建议 正在使用的输入网址是" http://kickass.so/anime/?rss=1"

2 个答案:

答案 0 :(得分:2)

torrent:是一个命名空间。查询数据时必须使用命名空间:

var torrent = XNamespace.Get("YourNamespaceUrl");

foreach (var item in reader.Descendants("item"))
{
    xmlItem temp = new xmlItem(item.Element("title").Value,
                       (item.Element(torrent + "magnetURI") != null
                            ? item.Element(torrent + "magnetURI").Value
                            : "(no uri)"));
    items.Add(temp);
}

此外,您可以将条件语句替换为??(string)XElement大小写:

    xmlItem temp = new xmlItem(item.Element("title").Value,
                       ((string)item.Element(torrent + "magnetURI") ?? "(no uri)"));

答案 1 :(得分:1)

如果你喜欢它编码的方式,我有public XML library使用该语法。但它也使它更简单,因为如果元素不存在,它将采用默认值。

foreach (var item in reader.Descendants("item"))
{
    xmlItem temp = new xmlItem(item.Element("title").Value, 
                               item.Get("torrent:magnetURI", "(no uri)"));
    items.Add(temp);
}

它通过内部使用来为您找出torrent命名空间:

XNamespace torrent = item.GetNamespaceOfPrefix("torrent");