2017-04-23 1 views
0

Je dispose d'un fichier html:Obtenez tous les éléments dans un NodeCollections

<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> 

J'utilise le code C# ci-dessous pour obtenir tous les times produits

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(); 

Je prends la première() "Form-wrapper" car ils sont nombreux.

J'ai essayé d'utiliser cela aussi:

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

problème est: comme vous pouvez le voir, j'ai 4 Clearfix classes donc je dois obtenir le résultat:

Time 
Time1 
Time2 
Time3 

mais pour certains raisons que je reçois seulement:

Time 
Time 
Time 
Time 

Répondre

2
  1. Lorsque vous interrogez sur un nœud, vous n'avez pas besoin de // au début, si vous l'ajoutez, la requête sera exécutée sur l'ensemble du document.

  2. Vous devez prendre premier nœud après avoir sélectionné, vous devez donc prendre nœud avec l'index 0 pas 1

Ce 2 points résoudra votre problème, mais il y a quelques améliorations que vous pouvez faire

  1. Au lieu de SelecNodes().First() vous pouvez l'utilisateur SelectSingleNode()
  2. Si vous n'avez pas besoin d'informations sur les nœuds parents vous pouvez directement interroger pour les nœuds de l'enfant - htmlDocument.SelectNodes("\\span[@class='time']") fera tout le travail