2012-03-29 3 views
0

Dies ist der HTML-Code, den ich analysieren möchte. Ich möchte jeden einzelnen td inneren Text bekommen.XPath/C# gibt nicht zurück, was erwartet wird

<tbody> 
    <tr class="past"> 
     <!--<th><span class="place">Lugar</span></th>--> 
     <td class="date">14/02/2012</td> 
     <td class="hour">16:25</td> 
     <td class="status">Entregue</td> 
    </tr> 
    <tr class="past"> 
     <!--<th><span class="place">Lugar</span></th>--> 
     <td class="date">13/02/2012</td> 
     <td class="hour">16:59</td> 
     <td class="status">Destinat&aacute;rio ausente ou fechado</td> 
    </tr> 
    <tr class="past"> 
     <!--<th><span class="place">Lugar</span></th>--> 
     <td class="date">11/02/2012</td> 
     <td class="hour">14:09</td> 
     <td class="status">Envio recolhido na origem</td> 
    </tr> 
    <tr class="past"> 
     <!--<th><span class="place">Lugar</span></th>--> 
     <td class="date">-</td> 
     <td class="hour">-</td> 
     <td class="status">Pendente de entrega &agrave; MRW</td> 
    </tr> 
</tbody> 

Ich verwende dieses Stück Code jedes td auf dieser Tabelle zu laufen Throught:

foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//tbody/tr/td")) 
{ 
    Console.WriteLine("TD: " + link.InnerText); 
} 

Diese foreach druckt nur einmal und es ist die gesamte Tabelle. Ich habe überall auf Google gesucht und der XPath-Ausdruck sollte stimmen. Können Sie herausfinden, was das Problem ist?

+0

Wo haben Sie diese HtmlNode- und DocumentNode-Klassen gefunden? Ich kann sie nicht in MSDN finden. Warum benutzt du XmlNode nicht? – JotaBe

+0

Es ist von der HtmlAgilityPack auf Codeplex, ich habe es zuvor für die Analyse von HTML verwendet und es gilt als die beste: \ Es ist nur dieses Mal, ich kann nicht herausfinden, was los ist. Ich werde es mit XmlNode versuchen. –

+0

Ihr XPath ist korrekt. Sie sollten die HtmlAgilityPack-Dokumente überprüfen und sehen, was genau SelectNodes macht. Übrigens sind alle XML-Bibliotheken, einschließlich .NET-Bibliotheken, nicht tolerant gegenüber fehlerhaften Dokumenten. Dies kann zu Problemen führen. Laut Dokumentation ist HtmlAgilityPack tolerant gegenüber ungültigen Dokumenten. Abhängig von der Herkunft Ihrer HTML-Dokumente sollten Sie also HtmlAgilityPack verwenden. – JotaBe

Antwort

0

Ihr Code ist korrekt. Wenn Sie versuchen, nur bestimmtes Stück Code zu analysieren, wird die Programmausgabe dies:

 
TD: 14/02/2012 
TD: 16:25 
TD: Entregue 
TD: 13/02/2012 
TD: 16:59 
TD: Destinatário ausente ou fechado 
TD: 11/02/2012 
TD: 14:09 
TD: Envio recolhido na origem 
TD: - 
TD: - 
TD: Pendente de entrega à MRW 

Ich nehme an, das ist das, was Sie wollen. Problem ist in Ihrem Originaldokument. Versuchen Sie, das Dokument in einem anderen Softwaretool zu öffnen, das Ihnen den vollständigen DOM-Baum anzeigt, und Sie werden sehen. Wahrscheinlich müssen Sie Ihren XPath-Ausdruck ändern.

Verwandte Themen