2010-07-30 6 views
1

Comment puis-je faire défiler la table et la ligne qui ont un identifiant ou un nom d'attribut pour obtenir le texte interne au fond de chaque cellule td? Je travaille sur asp.net, C#, et sur le tout nouveau package d'agilité html. S'il vous plaît guider. Je vous remercie.Html Agility Pack - boucle à travers les lignes et les colonnes

Un fichier html comporte plusieurs tables. L'un d'entre eux a un attribut id = main-part. Dans ce tableau identifié, il y a beaucoup de lignes. Certaines de ces lignes ont le même attribut name = display. Dans ces lignes nommées, il y a beaucoup de colonnes dont je dois extraire le texte. Quelque chose comme ceci:

<body> 
<table> 
... 
</table> 
<table> 
... 
</table> 

<table id="main-part"> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
    <tr name="display"> 
    <td>Jan</td> 
    <td>Feb</td> 
    <td>Mar</td> 
    ... 
    </tr> 
     <tr name="display"> 
    <td>Apr</td> 
    <td>May</td> 
    <td>June</td> 
    ... 
    </tr> 
     <tr name="display"> 
    <td>Jul</td> 
    <td>Aug</td> 
    <td>Sep</td> 
    ... 
    </tr> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
    <tr name="display"> 
    <td>Oct</td> 
    <td>Nov</td> 
    <td>Dec</td> 
    ... 
    </tr> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
</table> 
<table> 
... 
</table> 
</body> 
+0

s'il vous plaît se référer à ce lien.Un exemple comment utiliser package htmlagility .. [cliquez ici] (http://forums.asp.net/t/1508198.aspx?PageIndex=2) –

+0

J'ai suivi le lien et là est quelque chose d'intéressant. Je vous remercie. – David

Répondre

2

Vous devez sélectionner ces nœuds à l'aide XPath:

foreach(HtmlNode cell in doc.DocumentElement.SelectNodes("//tr[@name='display']/td") 
{ 
    // get cell data 
} 
+0

Merci pour votre aide. Pour le nouveau package obtenu, j'utilise DocumentNode à la place de DocumentElement. – David

1

Il a fonctionné! Merci beaucoup Oded.

HtmlDocument doc = new HtmlDocument(); 
     doc.Load(@"C:/samplefolder/sample.htm"); 
foreach(HtmlNode cell in doc.DocumentNode.SelectNodes("//tr[@name='display']/td")) 
{ 
     string test = cell.InnerText; 
     Response.Write(test); 
} 

Il a montré comme résultat JanFebMarAprMayJuneJulAugSepOctNovDec. Comment puis-je les trier, séparer par un espace ou une tabulation? Je vous remercie.

+0

peut-être que cela devrait être une nouvelle question? Quoi qu'il en soit, quand vous faites un 'Response.Write', vous pouvez ajouter la virgule à la fin -' Response.Write (test + ","); ' – Oded

+0

vous devriez aussi upvote et accepter les réponses, si elles ont aidé. Voir la FAQ - http://stackoverflow.com/faq – Oded

+0

juste utiliser Response.WriteLine (test); AU lieu de Response.Write (test); et à la fin de tout faire un Response.ReadLine(); vous pouvez donc le voir et confirmer que tout est comme prévu avant d'appuyer sur [Enter] pour quitter l'écran. –

Questions connexes