Запрос XML LINQ не возвращает данных - PullRequest
3 голосов
/ 16 декабря 2010

Я экспериментировал с LINQ to XML сегодня, но не очень успешно.Когда я использую пространство имен, я не получаю никаких данных.

Вот (упрощенный) xml:

<?xml version="1.0" encoding="UTF-8" ?>
<Message xmlns="urn:protocols:format13">
    <data>
    testdata
    </data>
</Message>

Я пытаюсь получить данные с помощью (xmlmsg - строка):

XElement root = XElement.Parse(xmlmsg);
XNamespace ns = root.Attribute("xmlns").ToString();

List<XElement> datalist =
       (from desc in root.Descendants(ns + "data")
         select desc).ToList<XElement>();

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

Я раньше использовал XmlReader, который отлично работал с пространствами имен.Но так как мои XML-данные становятся немного сложными для анализа, я хотел использовать LINQ.

Есть какие-нибудь подсказки?

1 Ответ

1 голос
/ 16 декабря 2010
        XNamespace ns = root.Name.Namespace;

        List<XElement> datalist =
               (from desc in root.Descendants(ns + "data")
                select desc).ToList<XElement>();

или почему это не сработало; у вас нет доступа к значению атрибута; это тоже работает:

XNamespace ns = (string)root.Attribute("xmlns");

или

XNamespace ns = root.Attribute("xmlns").Value;
...