今天我们怎么样?
我使用此代码读取XML文件,然后将结果放入my for each循环中。
var document = XDocument.Load(e.Result);
if (document.Root == null)
return;
var georss = XNamespace.Get("http://www.georss.org/georss");
var events1 = from ev1 in document.Descendants("channel").Elements("item")
let values = ev1.Element(georss + "point").Value.Split(' ')
select new
{
Latitude = double.Parse(values[0], CultureInfo.InvariantCulture),
Longitude = double.Parse(values[1], CultureInfo.InvariantCulture),
Title = (ev1.Element("title").Value),
};
blahblahMethod();
foreach (var ev1 in events1)
{
blah blah do stuff
}
好的,我们就是这样,我抓住了“点”和“标题”标签的内容,这些标签嵌套在XML文件中的每个父“item”标签内。 XML文件中有10个项目。问题是,并非所有“项目”都包含“点”标记。某些物品完全没有;所以只有“标题”标签。
当XML阅读器到达其中一个项目时,它会抛出'NullReferenceException未处理'。所以很明显发生了什么。我在解决这个方面遇到了麻烦。我想到了一些'if'语句,如果它到达一个null标签,那么它将跳过它,但似乎不适合VS接受的任何东西并且不会引发一些错误。任何帮助赞赏。 (初学者,请温柔!:-))
答案 0 :(得分:2)
我厌倦了查询语言的语法,并且更喜欢直接使用扩展方法,所以我会调整你的这一行: -
from ev1 in document.Descendants("channel").Elements("item")
.Where(e => e.Element(georss + "point") != null)
你可以在from之后在查询中添加一个where子句来做同样的事情。