LINQ -> XML Обработка несуществующих элементов-узлов - PullRequest
2 голосов
/ 21 февраля 2011

В настоящее время я использую Linq для анализа xml-файла, поскольку Linq занимает меньше строк кода, но у меня небольшая проблема с непоследовательными xml-файлами.Я пытаюсь проанализировать класс Series из xml, который в основном настроен так:

<series>
    <showid>5</showid>
    <showname>fringe</showname>
    <overview>description of the tv-show fringe.</overview>
</series>

И это все хорошо, это легко анализируется с помощью следующего кода:

var series = from serie in xdoc.Descendants ("Series")
    select new TvShow()
    {
         ShowID = (string) serie.Element("seriesid").Value,
         ShowName = (string) serie.Element ("SeriesName").Value,
         ShowDescription = (string) serie.Element ("Overview").Value,
    };

Но проблема возникает, когда я натыкаюсь на записи, у которых нет тега "обзор" ... Есть ли способ вернуть пустую строку, если элемент "обзор" не существует?*

1 Ответ

6 голосов
/ 21 февраля 2011

Абсолютно.Не используйте свойство Value - используйте вместо него явное преобразование в строку .Таким образом, вы получите null, если элемент не существует, и вы можете использовать оператор объединения нулей:

var series = from serie in xdoc.Descendants("Series")
             select new TvShow()
             {
                 ShowID = (string) serie.Element("seriesid"),
                 ShowName = (string) serie.Element("SeriesName"),
                 ShowDescription = (string) serie.Element("Overview") ?? "",
             };

(Очевидно, вы можете сделать то же самое для ShowName и ShowID.)

Обратите внимание, что все пользовательские преобразования из XAttribute и XElement имеют версию, допускающую обнуление, например приведение к int? вместо int ... все они работают одинаково, возвращая нулевое значениеесли исходный элемент или атрибут равен нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...