Linq to XML: проблема с двоеточием в тегах xml - PullRequest
1 голос
/ 16 ноября 2010

Вот код для извлечения значения из тега содержимого:

   var returnVerse = from item in xmlTreeVerse.Descendants("rss").Elements("channel").Elements("item")
                              select new VerseModel
                               {
                                   Verse = item.Element("content").Value,
                                   Url = ""
                               };

Вот файл XML:

<?xml version="1.0" ?>
<rss version="2.0"
                    xmlns:dc="http://purl.org/dc/elements/1.1/"
                    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
                    xmlns:admin="http://webns.net/mvcb/"
                    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
                    xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel>
    <title>text</title>
    <link>text</link>
    <item>
      <title>text</title>
      <content:encoded>
        Text
      </content:encoded>
    </item>
  </channel>
</rss>

Я не могу запросить «контент: кодировать», потому что онневерно для запроса оператора ":".Пожалуйста, помогите.

Ответы [ 3 ]

4 голосов
/ 16 ноября 2010

Этот "оператор двоеточия" является пространством имен.Вам также необходимо выполнить запрос к пространству имен.Вы используете пространства имен как это:

XNamespace content = XNamespace.Get("http://purl.org/rss/1.0/modules/content/");
Verse = item.Element(content + "encoded").Value
1 голос
/ 14 января 2012

Это сработало для меня, так что ответили на content:encoded на этот вопрос

var ns = XNamespace.Get(@"http://purl.org/rss/1.0/modules/content/");

var xelems = xmlDoc.Descendants().ToList();

nodes.ForEach(n => n.Element(XName.Get("encoded", ns.NamespaceName)).Value);

var elems = from x in xelems 
  select x.Element(XName.Get("encoded", ns.NamespaceName)).Value

Если вы хотите быстро протестировать эту работу на общедоступной ленте RSS, запустите этот код в консольном приложении или на LinqPad здесь, на Gist .

0 голосов
/ 16 ноября 2010

Вместо

item.Element("content").Value

Попробуйте:

item.Element(XName.Get("encoded", "content")).Value

Если item.Element() возвращает значение NULL, вам может потребоваться использовать это вместо:

item.Element(XName.Get("encoded", "http://purl.org/rss/1.0/modules/content/")).Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...