假设我有以下HTML代码:
<div class="MyDiv">
<h2>Josh</h2>
</div>
<div class="MyDiv">
<h2>Anna</h2>
</div>
<div class="MyDiv">
<h2>Peter</h2>
</div>我想知道名字,所以这就是我所做的(C#):
string url = "https://...";
var web = new HtmlWeb();
HtmlNode[] nodes = null;
HtmlDocument doc = null;
doc = web.Load(url);
nodes = doc.DocumentNode.SelectNodes("//div[@class='MyDiv").ToArray() ?? null;
foreach (HtmlNode n in nodes){
var name = n.SelectSingleNode("//h2");
Console.WriteLine(name.InnerHtml);
}输出:
Josh
Josh
Josh这太奇怪了,因为n只包含所需的<div>。我怎样才能解决这个问题?
通过写入.//h2而不是//h2来修正
发布于 2021-11-16 11:11:38
这是因为您的XPath语句"//h2“。您应该简单地将其更改为"h2“。当您从两个"//“开始时,路径从顶部开始。然后每次都选择"Josh“,因为这是第一个h2节点。
你也可以这样做:
List<string> names =
doc.DocumentNode.SelectNodes("//div[@class='MyDiv']/h2")
.Select(dn => dn.InnerText)
.ToList();
foreach (string name in names)
{
Console.WriteLine(name);
}https://stackoverflow.com/questions/69987195
复制相似问题