XDocument.Descendants(itemName) - 查找限定名称时出现问题

发布于 2024-09-27 10:37:54 字数 1126 浏览 7 评论 0原文

我正在尝试从网站读取 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 分析 - 但这次我正在为移动设备进行开发,因此需要关心性能。)

I'm trying to read a XML-RSS-Feed from a website. Therefore I use a async download and create a XDocument with the XDocument.Parse() Method.

The Document intends to be very simple, like this:

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

Now I want to read out all the items. Therefore I tried:

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

but this doesn't work. So I found a post in this board to use the qualified name, because there are some namespaces defined in the root element:

<?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/">

well, I tried all 3 available namespaces - nothing worked for me:

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/");

Any help would be appreciated.
(Usually I'm doing the XML-Analysis with Regex - but this time I'm developing for a mobile device, and therefore need to care about performance.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

忆梦 2024-10-04 10:37:54

您尚未尝试过默认命名空间 rdf 声明:

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

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

You have not tried the default namespace at the end of the rdf declaration:

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

This makes sense, as any element in the default namespace will not need to have the namespace prepended to the element name.

浅浅淡淡 2024-10-04 10:37:54

不能直接解决 XDocument RSS 读取问题。但为什么不使用提供的 SyncminationFeed 类来加载提要呢? http://msdn.microsoft.com/en-us /library/system.servicemodel.synmination.synminationfeed.aspx

Not directly a solution to the XDocument RSS read problem. But why aren't you using the provided SyncdicationFeed class to load the feed? http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx

一身仙ぐ女味 2024-10-04 10:37:54

试试这个

var elements = from p in xDocument.Root.Elements()
where p.Name.LocalName == "item"
select p;

foreach(var element in elements)
{
//Do stuff
}

Try this

var elements = from p in xDocument.Root.Elements()
where p.Name.LocalName == "item"
select p;

foreach(var element in elements)
{
//Do stuff
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文