2012-03-29 119 views
0

這是我試圖解析的HTML。我想要獲取每個單獨的td內部文本。XPath/C#沒有返回預期的結果

<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> 

我使用這段代碼對這個表運行throught每個TD:

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

這僅僅的foreach打印一次,它的整個表。我在Google上到處搜索,XPath表達式應該是正確的。你能弄清楚問題是什麼?

+0

你從哪裏找到這些HtmlNode和DocumentNode類?我無法在MSDN中找到它們。 ¿爲什麼不使用XmlNode? – JotaBe 2012-03-29 10:49:50

+0

它來自Codeplex上的HtmlAgilityPack,我之前用它來解析Html,它被認爲是最好的:\它只是這次,我無法弄清楚什麼是錯的。我會嘗試使用XmlNode。 – 2012-03-29 10:52:02

+0

您的XPath是正確的。你應該檢查HtmlAgilityPack文檔,看看SelectNodes到底是什麼。順便說一下,任何XML庫(包括.NET庫)都不能容忍格式錯誤的文檔。這可能會造成一些麻煩。根據文檔HtmlAgilityPack是容忍格式不正確的文件。所以,根據HTML文檔的來源,您應該堅持使用HtmlAgilityPack。 – JotaBe 2012-03-29 10:58:33

回答

0

您的代碼是正確的。如果您嘗試僅解析給定的一段代碼,程序將輸出此:

 
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 

我認爲這是你想要的。問題出在您的原始文檔中。嘗試在其他一些軟件工具中打開文檔,該工具將顯示完整的DOM樹,您將看到。可能你將不得不修改你的XPath表達式。