C#XML解析-跳过某些';项目';

C#XML解析-跳过某些';项目';,c#,xml,silverlight,silverlight-4.0,linq-to-xml,C#,Xml,Silverlight,Silverlight 4.0,Linq To Xml,我们今天怎么样 我使用此代码读取XML文件,然后将结果放入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(

我们今天怎么样

我使用此代码读取XML文件,然后将结果放入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”标记中的“point”和“title”标记的内容。XML文件中有10个条目。问题是,并非所有的“项”都包含“点”标记。有些项目完全没有;所以只有“标题”标签


当XML读取器到达其中一个项目时,它抛出一个“NullReferenceException was unhandled”。所以很明显发生了什么。我很难想出解决这个问题的办法。我想到了一些“如果”语句,如果它得到一个空标记,那么它将跳过它,但似乎不能适合VS接受的任何内容,并且不会抛出一些错误。谢谢你的帮助。(这里的初学者,请温柔一点!:-)

我讨厌查询语言语法,更喜欢直接使用扩展方法,所以我会像这样调整你的起始行:-

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

您可能会在from之后的查询中添加where子句,以执行相同的操作。

Brummy再次出现。。。谢谢你,安东尼,这就成功了。我不得不把“e”改成“ev1”,我想那是个错误吧?否则你会学到新东西;-)我以前从来没有用过Where语句,所以我从来没有想过(你能告诉我,我对这个很陌生!)。再次感谢您上的编码课!实际上,还有一件事,你能帮我理解这里发生了什么吗?对我来说,它看起来像是在过滤没有georss+point标记的项目,但显然它做的恰恰相反-D@Dan:使用e是我的错误,不是因为您使用的是ev1,而是因为e已经在作用域中(您的代码位于已使用e作为eventargs参数的事件处理程序中)。我本可以使用:-pinkElephants=>pinkElephants.Element(…)的,它会起作用。@Dan:“看起来它在“嗯…”中过滤没有georss+point标记的项目。。。不,它只包含包含子点元素的item元素(“!=null”不等于null)。啊,是的,我误解了=空语句。我想还是回到课本上来吧。。干杯丹