获取NodeCollections中的所有元素

时间:2017-04-23 16:25:36

标签: c# html-agility-pack

我有一个html文件:

<div class="form-wrapper">
<div></div>
<div class="Clearfix">
<div></div>
<div></div>
<span></span><span class="time">Time</span>
</div>
<div></div>
<div class="Clearfix">
<div></div>
<div></div>
<span></span><span class="time">Time1</span>
</div>
<div></div>
<div class="Clearfix">
<div></div>
<div></div>
<span></span><span class="time">Time2</span>
</div><div></div>
<div class="Clearfix">
<div></div>
<div></div>
<span></span><span class="time">Time3</span>
</div>

我使用下面的c#代码获取所有times项:

var node_1 = htmlDocument.DocumentNode.SelectNodes("//div[@class='form-wrapper']").First();
var ITEM = node_1.SelectNodes("//div[@class='clearfix']");
for (int Node = 0; Node < ITEM.Count; Node++)
{
  Console.WriteLine(ITEM[Node].SelectNodes("//span[@class='time']")[1].InnerText.Trim());
}
Console.ReadKey();

我正在使用First()&#34; Form-wrapper&#34;因为他们很多。

我也尝试过使用它:

foreach (var Node in node_1.SelectNodes("//div[@class='clearfix']"))
{
 //
}

问题:你可以看到我有4个Clearfix类,所以我需要得到结果:

Time
Time1
Time2
Time3

但出于某些原因我只能得到:

Time
Time
Time
Time

1 个答案:

答案 0 :(得分:2)

  1. 当您查询某个节点时,开头不需要//,如果您要添加,则查询将在整个文档中执行。

  2. 您需要在选择后选择第一个节点,因此您需要获取索引为0的节点而不是1

  3. 这2点可以解决您的问题,但您可以做一些改进

    1. 您可以使用SelecNodes().First()
    2. 代替SelectSingleNode()
    3. 如果您不需要有关父节点的任何信息,您可以直接查询 对于子节点 - htmlDocument.SelectNodes("\\span[@class='time']")将完成所有工作