我想使用HTML敏捷包来解析HTML页面中的图像和href链接,但我对XML或XPath不太了解。尽管在许多网站上查找了帮助文档,我只是可以'解决这个问题。另外,我在VisualStudio 2005中使用C#。我只是不会说流利的英语,所以,我真诚地感谢你能写一些有用的代码。
答案 0 :(得分:22)
主页上的first example做了类似的事情,但请考虑:
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
string href = link["href"].Value;
// store href somewhere
}
所以你可以想象,对于img @ src,只需用a
替换每个img
,用href
替换src
。
您甚至可以简化为:
foreach(HtmlNode node in doc.DocumentElement
.SelectNodes("//a/@href | //img/@src")
{
list.Add(node.Value);
}
对于相对网址处理,请查看Uri
类。
答案 1 :(得分:6)
示例和接受的答案是错误的。它不能使用最新版本进行编译。我尝试了别的东西:
private List<string> ParseLinks(string html)
{
var doc = new HtmlDocument();
doc.LoadHtml(html);
var nodes = doc.DocumentNode.SelectNodes("//a[@href]");
return nodes == null ? new List<string>() : nodes.ToList().ConvertAll(
r => r.Attributes.ToList().ConvertAll(
i => i.Value)).SelectMany(j => j).ToList();
}
这适合我。
答案 2 :(得分:1)
也许我来不及发表回答。以下对我有用:
var MainImageString = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault();
答案 3 :(得分:0)
您还需要考虑文档基本网址元素(<base>
)和协议相对网址(例如//www.foo.com/bar/
)。
有关详细信息,请查看:
答案 4 :(得分:0)
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
string name = htmlDoc.DocumentNode
.SelectNodes("//td/input")
.First()
.Attributes["value"].Value;