2012-04-12 2 views
0

Ich versuche, die Tabelle unten zu analysieren, aber leider scheint jeder der Knoten ineinander verschachtelt zu sein. :(Es ist unmöglich, den childnodes zu bekommen, weil es immer die Zählung geben = 1HtmlAgility Pack hat Schwierigkeiten, Informationen aus der geschachtelten Tabelle zu erhalten

Es ist wirklich interessant, aber es ist zu finden;? Zum Beispiel des nächste „tr“ als childNode des früheren tr

? haben Sie eine Idee haben,

<table width="292px" border="0"> 
    <tr> 
     <td> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <table> 
       <tr> 
        <td colspan="2" bgcolor="#FBCE9D" align="center" height="40"> 
        </td> 
       </tr> 
       <tr> 
        <td bgcolor="#FFF4D2" height="25" width="60"> 
        </td> 
        <td height="25" bgcolor="#e8e8e8"> 
        </td> 
       </tr> 
       <tr> 
        <td bgcolor="#FFF4D2" height="25" width="60"> 
        </td> 
        <td height="25" bgcolor="#e8e8e8"> 
        </td> 
       </tr> 
       <tr> 
        <td bgcolor="#FFF4D2" height="25" width="60"> 
        </td> 
        <td height="25" bgcolor="#e8e8e8"> 
        </td> 
       </tr> 
       <tr> 
        <td bgcolor="#FFF4D2" height="25" width="60"> 
        </td> 
        <td height="25" bgcolor="#e8e8e8"> 
        </td> //Here is a missing "</tr>" and I think this one is confusing the agilitypack! 
        <tr> 
         <td bgcolor="#FFF4D2" height="35" colspan="2" align="center"> 
         </td> 
        </tr> 
      </table> 
     </td> 
    </tr> 
</table> 

Mein Code ist:

var webGet = new HtmlWeb(); 
var doc = webGet.Load("the url where this table is located"); 
HtmlNodeCollection tb = doc.DocumentNode.SelectNodes("//table[@width='292px']"); 
         var table = tb[0].ChildNodes[1].ChildNodes[0].ChildNodes[0].ChildNodes; 
         for (var na = 0; na < table.Count; na++) 
         { .....do the work.... } 

Eigentlich wurde dieser Code wie ein Zauber funktioniert, bevor aber sie verschachtelt einen anderen Tisch im Inneren wi ist stucking th ChildNodes[1] weil es keine ChildNodes[1] gibt es immer ChildNodes[0]?

Noch ein Hinweis; Firebug zeigt "/ html/body/table/tbody/tr [2]/td/table/tbody" als den XPath der verschachtelten Tabelle, aber wie Sie vielleicht bemerken, ist "tbody" nicht mit htmlagility vertraut, da es dynamisch von der browser, um das fehlende schließen tag/tr

+0

Wie sieht Ihr Code aus? – shriek

+0

Sorry, ich habe es vergessen. Sie können es oben finden. – MrGorki

Antwort

1

Es ist wirklich interessant, aber das Problem war HmtlAgility Pack, ist tatsächlich bei Nuget verfügbar! Ich entfernte es und lade es aus dem Internet (http://htmlagilitypack.codeplex.com/). Es funktioniert jetzt!

0

XPATH zu löschen wird Ihnen hier sehr helfen.

Für innere Tabelle tr Knoten können Sie versuchen, diese unter

doc.DocumentNode.SelectNodes("//table[@width='292px']/tr/td/table/tr") 

Wenn Sie td Knoten innerhalb innere Tabelle zu durchqueren wollen, dann

doc.DocumentNode.SelectNodes("//table[@width='292px']/tr/td/table/tr/td") 
+0

Leider hat es nicht funktioniert. Aber dieses Mal habe ich das auch bemerkt; dort 64 Stück Parse Fehler auf dieser Tabelle einschließlich "End-Tag ungültig hier" und ähnlich ... Also ich denke, sie haben diese kaputte Struktur nach dem Zweck, die Menschen wie uns zu beseitigen :(Also, haben Sie mehr Meinung? – MrGorki

+0

I ' Ich habe auch ein paar Kommentare zu dieser Frage geschrieben. – MrGorki

+0

@Gorkem - Nicht sicher, warum es nicht funktioniert. Können Sie bitte genau das ausarbeiten, was Sie suchen? Könnten Sie bitte die tatsächliche URL nennen, damit ich darauf eingehen kann, warum es nicht ist "tbody" existiert nicht im Code, also brauchst du dir darüber keine Gedanken zu machen. Ich denke, die falsche 'HTML'-Struktur könnte ein Programmierfehler sein und ich denke nicht, dass es absichtlich ist. –

Verwandte Themen