C# HtmlAgilityPack获取标记
我试图使用HTMLAgilityPack来解析html页面并获取atom:链接,其中包含在项目标记中。以下是html的一个示例: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&emc=rss" rel
<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&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!谢谢你的回答!