Синтаксический анализ C # XML - пропуск пустых тегов в некоторых «элементах» - PullRequest
2 голосов
/ 30 декабря 2010

как мы сегодня?

Я использую этот код для чтения XML-файла и впоследствии помещаю результаты в my для каждого цикла.

 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
       }

Хорошо, вот и мы,Я беру содержимое тегов "point" и "title", которые вложены в каждый родительский тег "item" в файле XML.В файле XML есть, скажем, 10 элементов.Проблема в том, что не все «элементы» содержат тег «точка».Он полностью отсутствует в некоторых предметах;таким образом, будет только тег "title".

Когда читатель XML достигает одного из этих элементов, он выбрасывает исключение NullReferenceException.Так что это довольно очевидно, что происходит.У меня проблемы с поиском решения этой проблемы.Я подумал о каком-то утверждении «если», что если он попадет в нулевой тег, он пропустит это, но, похоже, не может соответствовать чему-то, в чем VS принимает и не выдает какую-либо ошибку.Любая помощь приветствуется.(Начинающий здесь, будьте нежны, пожалуйста! :-))

1 Ответ

2 голосов
/ 30 декабря 2010

У меня есть отвращение к синтаксису языка запросов, и я предпочитаю использовать методы расширения напрямую, поэтому я бы настроил вашу строку из строки так:

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

Вы, вероятно, могли бы добавить предложение where в запрос сразу после from, чтобы сделать то же самое.

...