2013-03-16 7 views
5

Ich versuche, den inneren Text eines TD mit einem ID-Attribut mit dem HTMLAgilityPack auszuwählen.HTMLAgilityPack get InnerText eines TD-Tags mit einem ID-Attribut

Html-Code:

<td id="header1"> 5 </td> 
<td id="header2"> 8:39pm </td> 
<td id="header3"> 8:58pm </td> 
... 

Code:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 

doc.LoadHtml(data); 

var nodes = doc.DocumentNode.SelectNodes("//td[@id='header1']"); 

if (nodes != null) 
{ 
    foreach (HtmlAgilityPack.HtmlNode node in nodes) 
    { 
     MessageBox.Show(node.InnerText); 
    } 
} 

Ich erhalte immer null Knoten, weil ich nicht die Wahl der td-Tag richtig, aber kann nicht herausfinden, was ich falsch gemacht haben ...

Bearbeiten:

Ich habe einen Fehler gemacht mit Header1 und Header2, aber es gibt 5 d ififfer td-Tags mit Kopfzeilen 1 bis 5.

+1

Haben Sie diese IDs überprüfen Sie ha genommen haben. '' und Sie erhalten von ** '(// td [@ id = 'header1'"); '** –

+1

In html, ist die ID' header2' während im Code, es wird als 'header1' angegeben. –

+0

Ihr Code scheint korrekt zu sein. Können Sie Ihre Daten irgendwo posten? –

Antwort

6

Sie versuchen, header1 auszuwählen, aber die ID ist header2.

Sie könnten auch GetElementById direkt verwenden:

var td = doc.GetElementbyId("header2"); 
1

Hmm .. Ich glaube nicht, dass Sie nichts falsch machen. Ihr Code sollte Ihnen nur die <td> mit id="header1" geben. Wenn Sie haben, lassen Sie uns sagen, header1-header5, können Sie tun:

for (int i = 1; i <= 5; i++) { 
    var tdNode = doc.DocumentNode.SelectSingleNode(string.Format("//td[@id='header{0}']", i)); 

    //do something with the node here 
} 

obwohl ich vorschlagen, veröffentlichen Sie Ihren gesamten Code, so dass wir Ihnen sagen, warum Sie null bekommen, und auch einen besseren Weg .. die <td> Knoten Parsen, ohne die obige Schleife zu tun (zB so etwas wie //tr[@id='some-id']//td[contains(@id, 'header')]

0

können Sie Ihr Problem lösen die Innerhtml-Eigenschaft wie durch den Einsatz:

var td = doc.GetElementbyId("header2").InnerHtml;