2017-07-02 1 views
0

pack agilité html obtenir une même sortie deux fois C#

<div class="header"> 
 
    <span id="content">test1</span> 
 
</div> 
 
<div class="header"> 
 
    <span id="content">test2</span> 
 
</div>

var web = new HtmlWeb(); 
var doc = web.Load(url) 
var value = doc.DocumentNode.SelectNodes("//div[@class='header']") 
foreach(var v in value) 
{ 
var name = v.SelectSingleNode("//span[@id='content']") 
Console.Writeline(name.OuterHtml); 
} 

le code me donne ci-dessus en sortie deux fois <span id="content">test1</span> au lieu de <span id="content">test2</span> comme deuxième sortie. Donc, il obtient le nombre correct de nœuds mais pas la sortie correcte. L'utilisation de // et/dans XPath interrogera le nœud racine même si vous utilisez le nœud actuel.

+0

Assurez-vous que les éléments ne sont pas répétés dans le document. Essayez de déboguer avec un point de rupture et revenez ici avec vos résultats. –

+0

même id pour 2 span différent? Huaah !! –

Répondre

1

Veuillez voir ma correction dans votre code.

var value = doc.DocumentNode.SelectNodes("//div[@class='header']"); 
foreach (var v in value) 
{ 
    var name = v.SelectSingleNode("span[@id='content']"); 
    Console.WriteLine(name.OuterHtml); 
} 

Voir ce violon. https://dotnetfiddle.net/nih2lw

Une note de côté, attribut id doit toujours être unique dans le document. Utilisez la classe à la place.