Windows 7 Mobile Silverlight: проблема Linq to XML - PullRequest
1 голос
/ 14 ноября 2010

У меня есть документ XML:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>blahblah</title>
  <subtitle>blahblah.</subtitle>
  <link href="blahblah"/>
  <link href="blahblah"/>
  <updated>blahblah</updated>
  <author>
    <name>blahblah</name>
  </author>
  <id>blahblah</id>

  <entry>
    <title>blahblah</title>
    <content type="html"><![CDATA[&ldquo;some text.&rdquo;]]></content>
  </entry>
</feed>

Я хочу получить информацию о содержимом узлов ввода, вот мой код:

var xmlTreeVal = XDocument.Load("myxml.xml");

        var returnVal = from item in xmlTreeVerse.Descendants("feed").Elements("entry")
                          select new VerseModel
                           {
                               Verse = item.Element("content").Value
                           };

XML-документ загружается нормально (как я мог бы сказать с помощью отладки), но он продолжает выдавать ошибку «Не найдены последовательные элементы». Как мне найти информацию об узлах «контент»?

1 Ответ

3 голосов
/ 14 ноября 2010

Всякий раз, когда ваш XML имеет пространство имен (обозначенное атрибутом xmlns), вы должны ссылаться на элементы, также ссылаясь на их пространство имен. Это делается путем объединения пространства имен с именем элемента.

Кроме того, вы использовали xmlTreeVal, но затем указали xmlTreeVerse - это, вероятно, не проблема , но это несоответствие в представленном вами коде.

Попробуйте это:

var ns = xmlTreeVerse.Root.GetDefaultNamespace();
var returnVal = from item in xmlTreeVerse.Descendants(ns + "feed").Elements(ns + "entry")
                select new 
                {
                    Verse = item.Element(ns + "content").Value
                };
...