指定表后的HtmlAgilityPack读表

时间:2015-07-08 11:06:28

标签: html html-agility-pack

我有类似的结构:

<table class="superclass">                    
   <tr>                                                                  
       <td>    
       </td>                                                            
       <td>                                                     
       </td>                                                             
    </tr>                                                                
   <tr>                                                                  
       <td>                                                        
       </td>                                                             
       <td>                                              
       </td>                                                            
    </tr>                                                                
</table>                                                                

<table cellspacing="0">                                                  
    <tr>                                                                 
       <td>                                      
       </td>                                                            
       <td>
       </td>                                                            
    </tr>                                                    
    <tr>                                                                 
       <td>                                                       
       </td>                                                            
        <td>                                                       
       </td>                                                            
    </tr>                                                                
</table>                   

这就是我用class得到第一个表的方法:

HtmlNode firstTable = document.DocumentNode.SelectSingleNode("//table[@class=\"superclass\"]");

然后我读了数据。但是,我不知道如何直接进入另一个表并读取该数据。有任何想法吗?

我宁愿避免计算它是哪个表,然后使用该表的索引。

2 个答案:

答案 0 :(得分:1)

如果要访问多个节点,可以考虑SelectSingleNode(xpath)方法的SelectNodes(xpath)方法。

我将在此提供示例代码供您参考,但可能无法满足您的需求。

        var tables = htmlDocument.DocumentNode.SelectNodes("//table");
        foreach (HtmlNode table in tables)
        {
            if (table.GetAttributeValue("class", "").Contains("superclass"))
            {
                //this is the table of class="superclass"
            }
            else
            {
                //this is the other table.
            }
        }

答案 1 :(得分:1)

XPath following-sibling轴允许您在同一级别获取当前上下文元素之后的元素:

HtmlNode firstTable = document.DocumentNode.SelectSingleNode("//table[@class=\"superclass\"]");
HtmlNode nextTable = firstTable.SelectSingleNode("following-sibling::table");