希望有人能帮助我。
假设我有一个包含多个 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
都应该是一个包含 span 作为属性的对象:
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
相关。
有人知道解决方案吗?我已经玩了那么多,现在我完全困惑了。 :)
感谢任何帮助!
最佳答案
如果您使用//
,它会从文档开始搜索。
使用.//
从当前节点开始搜索所有
foreach (HtmlAgilityPack.HtmlNode node2 in node.SelectNodes(".//span[@prop]"))
或者完全删除前缀以仅搜索直接子代:
foreach (HtmlAgilityPack.HtmlNode node2 in node.SelectNodes("span[@prop]"))
关于c# - HtmlAgilityPack 并选择节点和子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15003409/