Выпуск разбора RSS xml - PullRequest
       22

Выпуск разбора RSS xml

2 голосов
/ 30 марта 2010

У меня проблема с использованием Linq to XML для разбора следующего XML. То, что я делаю, это заставляет элемент проверять, что я хочу, а затем переходить к следующему. Я почти уверен, что это связано с xmlns, но мне нужен этот код для работы как с RSS-фидами, так и с обычным стилем (без xmlns). Есть идеи?

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
  <channel rdf:about="http://someurl.com">
    <title>sometitle</title>



XElement currentLocation  = startElementParameter;
            foreach (string x in ("channel\\Title").Split('\\'))
            {
                if (condition1 == false)
                {
                    continue;
                }
                else if (condition2 == false)
                {
                    break;
                }
                else
                {
                    // This is returning null.
                    currentLocation = currentLocation.Element(x);
                }
            }

Спасибо! * * 1004

РЕДАКТИРОВАТЬ: XML не вставить правильно.

1 Ответ

0 голосов
/ 04 апреля 2010

Метод XElement.Element ожидает XName.

Вы проходите через строку, что означает, что она неявно преобразуется в XName без присоединенного пространства имен.

Другими словами, ваши вызовы XElement.Element() запрашивают элементы с именем channel без пространства имен, но элементы channel в вашем примере XML находятся в пространстве имен http://purl.org/rss/1.0/, поскольку атрибут xmlns="http://purl.org/rss/1.0/" в <rdf:RDF>.

Чтобы правильно извлекать элементы канала при наличии пространства имен, вы можете сделать это:

var ns = XNamespace.Get("http://purl.org/rss/1.0/");
currentLocation = currentLocation.Element(ns + "channel");

Использование оператора + в XNamespace и строке создает XName с присоединенным пространством имен.

Чтобы поддерживать оба стиля этого документа, проверьте, имеет ли XDocument.Root пространство имен с ожидаемым значением URI. Для этого вы можете использовать XElement.GetDefaultNamespace () .

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