C#XML解析 - 在某些“项目”中跳过空标签

时间:2010-12-30 16:27:41

标签: c# xml silverlight silverlight-4.0 linq-to-xml

今天我们怎么样?

我使用此代码读取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接受的任何东西并且不会引发一些错误。任何帮助赞赏。 (初学者,请温柔!:-))

1 个答案:

答案 0 :(得分:2)

我厌倦了查询语言的语法,并且更喜欢直接使用扩展方法,所以我会调整你的这一行: -

from ev1 in document.Descendants("channel").Elements("item")
    .Where(e => e.Element(georss + "point") != null)

你可以在from之后在查询中添加一个where子句来做同样的事情。