我正在尝试使用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"
答案 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");