分析内部HTML
本文关键字:HTML 内部 | 更新日期: 2023-09-27 18:03:31
这就是我想要解析的内容
<div class="photoBox pB-ms">
<a href="/user_details?userid=ePDZ9HuMGWR7vs3kLfj3Gg">
<img width="100" height="100" alt="Photo of Debbie K." src="http://s3-media2.px.yelpcdn.com/photo/xZab5rpdueTCJJuUiBlauA/ms.jpg">
</a>
</div>
我正在使用以下XPath来查找
HtmlNodeCollection bodyNode = htmlDoc.DocumentNode.SelectNodes("//div[@class='photoBox pB-ms']");
这很好,并返回,s me alldiv,s with photobox class
但当我想使用获得ahref时
HtmlNodeCollection bodyNode = htmlDoc.DocumentNode.SelectNodes("//div[@class='photoBox pB-ms'//a href]");
我得到错误无效令牌。
此外,我还尝试使用查询
var lowestreview =
from main in htmlDoc.DocumentNode.SelectNodes("//div[@class='photoBox pB-ms']")
from rating in main.SelectNodes("//a href")
select new { Main=main.Attributes[0].Value,AHref = rating.ToString() };
有人会告诉我如何编写XPath或查询来获得这个AHref
这是有效的(已测试(:
HtmlNodeCollection bodyNodes = htmlDoc.DocumentNode
.SelectNodes("//div[@class='photoBox pB-ms']/a[@href]");
foreach(var node in bodyNodes)
{
string href = node.Attributes["href"].Value;
}
问题是您将属性选择器和元素选择器混淆了。此外,您还质疑是否真的打算查询集合。
上面的XPath选择器将选择具有href
属性的所有a
元素,这些元素是类为'photoBox pB-ms'
的div
元素的子节点。然后,您可以迭代这个集合,并获得每个元素的href
属性值。
此外,HtmlAgilityPack现在支持Linq(自1.4起(,因此只需获得特定的属性值就可以更容易地完成(imo(,如下所示:
string hrefValue = htmlDoc.DocumentNode
.Descendants("div")
.Where(x => x.Attributes["class"].Value == "photoBox pB-ms")
.Select(x => x.Element("a").Attributes["href"].Value)
.FirstOrDefault();
您可以使用HTMLAgilePack 而不是XML解析
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml([HTML Text]);
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
HtmlAttribute att = link["href"];
// att.Value
}