NullRefereceException при разборе твита - PullRequest
0 голосов
/ 04 апреля 2011

У меня есть приложение, которое я пишу, которое позволяет пользователям искать в Твиттере, написанном в основном для развлечения и изучения того, как XML и LINQ играют вместе. Я написал код для получения канала атома (пример запроса: http://search.twitter.com/search.atom?q=twitter),, и я могу убедиться, что он фактически получает XML.

Просто для начала разбора документа я подумал, что будет достаточно просто разобрать содержание каждого твита. Как только я проверю, что это работает, я перейду к автору, затем к дате, и так далее, и так далее, пока все не будет проанализировано.

Вот что я использую для получения контента:

            var list = from tweet in doc.Element("feed").Descendants("entry")
                       select new Tweet("AUTHOR", tweet.Element("content").Value, new DateTime(), "TITLE");

Как видите, структура документа выглядит примерно так:

<feed><entry><content></content></entry>.....</feed>

По крайней мере, насколько мы обеспокоены. Я получаю исключение NullReferenceException для этой строки кода, но отладчик показывает, что документ не является нулевым (на самом деле в него загружен весь канал). Предыдущая строка вызывает XDocument.Parse (), который не вызывает исключений.

Кто-нибудь знает, что может быть причиной моего падения?

Ответы [ 2 ]

7 голосов
/ 04 апреля 2011

Элемент feed включает в себя:

xmlns="http://www.w3.org/2005/Atom"

, который изменяет пространство имен по умолчанию для элементов. Вы должны использовать это так:

XNamespace ns = "http://www.w3.org/2005/Atom";
var list = from tweet in doc.Element(ns + "feed")
                            .Descendants(ns + "entry")
           select new Tweet("AUTHOR", 
                            tweet.Element(ns + "content").Value,
                            new DateTime(), "TITLE");

(Просто чтобы объяснить, вы искали элемент «feed» без пространства имен; его не было, поэтому Element вернул null. Если бы вы исправили это, Descendants вернул бы пустой последовательность. Если бы вы исправили эти два, tweet.Element("content") вернул бы ноль, вызывая другой NullPointerException.)

1 голос
/ 04 апреля 2011

Существует несколько возможностей:

  1. Element("feed") равно нулю
  2. Descendants("entry") равно нулю
  3. tweet.Element("content") равно нулю

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

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