【发布时间】:2021-04-22 00:05:50
【问题描述】:
希望有人可以帮助我。
假设我有一个包含多个 divs 的 html 文档,如下例所示:
<div class="search_hit">
<span prop="name">Richard Winchester</span>
<span prop="company">Kodak</span>
<span prop="street">Arlington Road 1</span>
</div>
<div class="search_hit">
<span prop="name">Ted Mosby</span>
<span prop="company">HP</span>
<span prop="street">Arlington Road 2</span>
</div>
我正在使用HtmlAgilityPack 获取html 文档。我需要知道的是如何获得每个search_hit-div 的跨度?
我的第一个想法是这样的:
foreach (HtmlAgilityPack.HtmlNode node in
doc.DocumentNode.SelectNodes("//div[@class='search_hit']"))
{
foreach (HtmlAgilityPack.HtmlNode node2 in node.SelectNodes("//span[@prop]"))
{
}
}
每个div 都应该是一个对象,其中包含跨度作为属性:
public class Record
{
public string Name { get; set; }
public string company { get; set; }
public string street { get; set; }
}
然后将填写此列表:
public List<Record> Results = new List<Record>();
但是我使用的XPATH 并没有像它应该做的那样在子节点中进行搜索。它似乎一次又一次地搜索整个文档。
我的意思是我已经以这种方式工作了,我只是获得了整个页面的跨度,但是我在 spans 和 divs 之间没有任何关系。意思是,我不再知道哪个span 与哪个div 相关。
有人知道解决方案吗?我已经玩了那么多,现在我完全糊涂了。 :)
感谢任何帮助!
【问题讨论】:
-
查看我对解析代码方式的回答(完整的工作解决方案)。
标签: c# xpath html-agility-pack