【问题标题】:read attribute using XDocument and LINQ使用 XDocument 和 LINQ 读取属性
【发布时间】:2010-10-16 11:19:35
【问题描述】:

我正在尝试解析 RSS 提要。我可以取出元素,但无论我尝试什么,我都无法获得属性!

这是 rss 提要 (xml) 的样子:

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>nu.nl - Algemeen</title>
    <copyright>Copyright (c) 2010, nu.nl</copyright>
    <link>http://www.nu.nl/algemeen/</link>
    <language>nl</language>
    <description>nu.nl Rich Site Summary</description>
    <pubDate>Sat, 16 Oct 2010 08:36:37 +0200</pubDate>
              <item>
        <title>Jason W. keert zich af van moslimextremisme</title>
        <link>http://www.nu.nl/binnenland/2357342/jason-w-keert-zich-af-van-moslimextremisme.html</link>
        <guid>http://www.nu.nl/binnenland/2357342/index.html</guid>
        <description>AMSTERDAM - Het vermeende lid van de Hofstadgroep Jason W. heeft het moslimextremisme naar eigen zeggen de rug toegekeerd.</description>
                <related>
            <b>Gerelateerd nieuws:</b><br />
                                    - <a href="http://www.nu.nl/binnenland/2293903/nieuw-proces-leden-hofstadgroep.html">Nieuw proces tegen leden Hofstadgroep</a><br />
                                    - <a href="http://www.nu.nl/binnenland/2175558/proces-hofstadgroep-moet.html">Proces Hofstadgroep moet over</a><br />
                                    - <a href="http://www.nu.nl/algemeen/2073580/eu-hof-verwerpt-beroep-van-lid-hofstadgroep.html">EU-hof verwerpt beroep van lid Hofstadgroep</a><br />
                    </related>
                <pubDate>Sat, 16 Oct 2010 08:36:36 +0200</pubDate>
        <category>Algemeen</category>
                <enclosure url="http://media.nu.nl/m/m1cz4nqakofe_t.jpg" type="image/jpeg" />      </item>

我想要获取的属性是“enclosure url”。

这是我的尝试:

private IEnumerable<Channel> getChannelQuery(XDocument xdoc)
    {

        return from channels in xdoc.Descendants("channel")
            select new Channel
            {
                Title = channels.Element("title") != null ? channels.Element("title").Value : "",
                Link = channels.Element("link") != null ? channels.Element("link").Value : "",
                Description = channels.Element("description") != null ? channels.Element("description").Value : "",
                //PubDate = channels.Element("pubDate") != null ? channels.Element("pubDate").Value : "",
                //Enclosure = channels.Element("enclosure ") != null ? channels.Element("enclosure").Value : "",
                Items = from items in channels.Descendants("item")
                    select new Item
                    {
                        Title = items.Element("title") != null ? items.Element("title").Value : "",
                        Link = items.Element("link") != null ? items.Element("link").Value : "",
                        Description = items.Element("description") != null ? items.Element("description").Value : "",
                        Guid = (items.Element("guid") != null ? items.Element("guid").Value : ""),
                        PubDate = (items.Element("pubDate") != null ? items.Element("pubDate").Value : ""),
                        Enclosure = (items.Attribute("url") != null ? items.Attribute("url").Value : "")
                    }
            };
    }

我在这里做错了什么?

【问题讨论】:

  • 乔恩你是怎么做到的?

标签: linq attributes linq-to-xml


【解决方案1】:

不是吗

Enclosure = (items.Element("enclosure").Attribute("url") != null ? items.Element("enclosure").Attribute("url").Value : "")

?

【讨论】:

  • 是的,有效!但是怎么做?外壳不是元素吗?不应该是一个属性吗?
  • @Yustme:我想你很困惑,因为附件是一个自闭合标签,它仍然是一个以 开头的元素
  • 啊,好吧,我玩 xml 已经有一段时间了。谢谢你帮我解决这个问题!
猜你喜欢
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多