C# HtmlAgilityPack获取标记

C# HtmlAgilityPack获取标记,c#,parsing,tags,html-agility-pack,C#,Parsing,Tags,Html Agility Pack,我试图使用HTMLAgilityPack来解析html页面并获取atom:链接,其中包含在项目标记中。以下是html的一个示例: <item><atom:link href="http://www.nytimes.com/2013/12/09/world/asia/justice-for-abused- afghan-women-still-elusive-un-report-says.html?partner=rss&amp;emc=rss" rel

我试图使用HTMLAgilityPack来解析html页面并获取atom:链接,其中包含在项目标记中。以下是html的一个示例:

<item><atom:link href="http://www.nytimes.com/2013/12/09/world/asia/justice-for-abused-
    afghan-women-still-elusive-un-report-says.html?partner=rss&amp;emc=rss" 
    rel="standout" />
URL列表是空的,我想我做错了什么。
如果有人能为我指出解决方案,那就太好了,提前谢谢。

以下代码提取了所有链接:

 var links = doc.DocumentNode.SelectNodes(@"//item/*[name()='atom:link']/@href");
如果要从每个项目节点获取它们,则需要使用:

 var link = item.SelectSingleNode(@"./*[name()='atom:link']/@href");

我仍然建议您使用Linq to XML或XPathNavigatable或使用专用的Atom库(如或或)将Atom提要加载到适当的XML结构中。

以下代码提取所有链接:

 var links = doc.DocumentNode.SelectNodes(@"//item/*[name()='atom:link']/@href");
如果要从每个项目节点获取它们,则需要使用:

 var link = item.SelectSingleNode(@"./*[name()='atom:link']/@href");

我仍然建议您使用Linq to XML或XPathNaviable或使用专用的Atom库(如或或)将Atom提要加载到适当的XML结构中。

要解析XML,您不需要HtmlAgilityPack

var url = "http://www.nytimes.com/services/xml/rss/nyt/International.xml";
var xDoc = XDocument.Load(url);

XNamespace atom = "http://www.w3.org/2005/Atom";

var items = xDoc.Descendants("item")
            .Select(item => new
            {
                Title = (string)item.Element("title"),
                Url = item.Element(atom + "link") != null 
                          ? (string)item.Element(atom + "link").Attribute("href") 
                          : (string)item.Element("link")
            })
            .ToList();
或者,您也可以使用类

var url = "http://www.nytimes.com/services/xml/rss/nyt/International.xml";
var xDoc = XDocument.Load(url);
SyndicationFeed feed = SyndicationFeed.Load(xDoc.CreateReader());

现在您可以循环feed.Items。

要解析xml,您不需要HtmlAgilityPack

var url = "http://www.nytimes.com/services/xml/rss/nyt/International.xml";
var xDoc = XDocument.Load(url);

XNamespace atom = "http://www.w3.org/2005/Atom";

var items = xDoc.Descendants("item")
            .Select(item => new
            {
                Title = (string)item.Element("title"),
                Url = item.Element(atom + "link") != null 
                          ? (string)item.Element(atom + "link").Attribute("href") 
                          : (string)item.Element("link")
            })
            .ToList();
或者,您也可以使用类

var url = "http://www.nytimes.com/services/xml/rss/nyt/International.xml";
var xDoc = XDocument.Load(url);
SyndicationFeed feed = SyndicationFeed.Load(xDoc.CreateReader());

现在可以循环feed.Items了。

Atom是一个有效的XML结构。为什么要使用HtmlAgilityPack来解析它?至于抓取atomLlink标记,您可能需要在不使用名称空间atom的情况下使用/link,或者使用本地名称函数@jessehouwing,谢谢您的回答。如果是这样,我只想解析标签中包含的链接。我仍然认为我使用的语法是wrong@jessehouwing,我现在尝试了后代链接,但它不起作用,然后我尝试了SelectNodes//link,但它也不起作用。如果您有任何建议,我将不胜感激,提前谢谢!Atom是一种有效的XML结构。为什么要使用HtmlAgilityPack来解析它?至于抓取atomLlink标记,您可能需要在不使用名称空间atom的情况下使用/link,或者使用本地名称函数@jessehouwing,谢谢您的回答。如果是这样,我只想解析标签中包含的链接。我仍然认为我使用的语法是wrong@jessehouwing,我现在尝试了后代链接,但它不起作用,然后我尝试了SelectNodes//link,但它也不起作用。如果您有任何建议,我将不胜感激,提前谢谢!谢谢你的回答!var link=item中的item是什么。SelectSingleNode@./*[name='atom:link']/@href?item应该是itemsthanks中foreach var item中的项!var link=item中的item是什么。SelectSingleNode@./*[name='atom:link']/@href?item应该是itemsThanks中foreach var item中的item!谢谢你的回答!