2012-03-29 73 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表达式。