【问题标题】:XDocument.Descendants(itemName) - Problems finding qualified nameXDocument.Descendants(itemName) - 查找限定名称时出现问题
【发布时间】:2010-10-13 13:40:36
【问题描述】:

我正在尝试从网站读取 XML-RSS-Feed。因此我使用异步下载并使用XDocument.Parse() 方法创建XDocument

文档打算很简单,像这样:

<root>
  <someAttribute></SomeAttribute>
  <item>...</item>
  <item>...</item>
</root>

现在我想读出所有项目。因此我尝试了:

foreach (XElement NewsEntry in xDocument.Descendants("item"))

但这不起作用。所以我在这个板子里找到了一个帖子使用限定名,因为在根元素中定义了一些命名空间:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns="http://purl.org/rss/1.0/">

好吧,我尝试了所有 3 个可用的命名空间 - 对我没有任何帮助:

XName itemName = XName.Get("item", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
XName itemName2 = XName.Get("item", "http://purl.org/dc/elements/1.1/");
XName itemName3 = XName.Get("item", "http://purl.org/rss/1.0/modules/syndication/");

任何帮助将不胜感激。 (通常我正在使用 Regex 进行 XML 分析 - 但这次我正在为移动设备开发,因此需要关心性能。)

【问题讨论】:

    标签: c# linq-to-xml qualified-name xname


    【解决方案1】:

    你还没有尝试rdf声明末尾的default namespace

    xmlns="http://purl.org/rss/1.0/"
    

    这是有道理的,因为默认命名空间中的任何元素都不需要在元素名称前加上命名空间。

    【讨论】:

    • 是的,就是这样 - 我没想到的一个解决方案。非常感谢。
    • @dognose - 没问题。不胜感激,您会接受答案;)
    【解决方案2】:

    不是 XDocument RSS 读取问题的直接解决方案。但是你为什么不使用提供的 SyncdicationFeed 类来加载提要呢? http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx

    【讨论】:

    • 看起来很有趣。我也去看看。
    【解决方案3】:

    试试这个

    var elements = from p in xDocument.Root.Elements()
    where p.Name.LocalName == "item"
    select p;
    
    foreach(var element in elements)
    {
    //Do stuff
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多