代码之家  ›  专栏  ›  技术社区  ›  peirix

获取每个HTML表行的第一个和第二个单元格

  •  4
  • peirix  · 技术社区  · 14 年前

    我尝试使用HTMLAgilityPack在每一行中获取一些特定的单元格。

    foreach (HtmlNode row in ContentNode.SelectNodes("descendant::tr"))
    {
        //Do something to first cell
        //Do something to second cell
    }
    

    有更多的细胞,每个细胞都需要一些特殊的治疗。我想有一种方法可以使用XPath来实现这一点,但我在这方面很没用。可能有类似的事情吗

    var cell1 = row.SelectSingleNode("descendant::td:first");
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Abel    14 年前

    要获取作为行的子级的每个第一个单元格,可以执行以下操作:

    // from row
    var firstCell = row.SelectSingleNode("td[1]");
    
    // each first cell in a table (note: tbody is not always there)
    var allFirstCells = table.SelectNodes("tbody/tr/td[1]");
    

    last()

    // from row
    var lastCell = row.SelectSingleNode("td[last()]");
    
    // each last cell in a table
    var allLastCells = table.SelectNodes("tbody/tr/td[last()]");
    

    // from row
    var firstCell = row.SelectSingleNode("td[1]");
    var siblingCell = firstCell.SelectSingleNode("./following-sibling::td");
    

    您可能希望检查返回值是否为null,这意味着您可能有输入错误,或者您加载的DOM树不包含您要求的单元格。

        2
  •  3
  •   Dimitre Novatchev    14 年前

    而不是 :

    descendant::tr
    

    使用 :

    descendant::tr/td[not(position() >2)]