【问题标题】:Specify range of nodes - Xpath/Html Agility Pack指定节点范围 - Xpath/Html Agility Pack
【发布时间】:2014-12-01 01:26:24
【问题描述】:

我试图找出指定范围的节点。我已经看到在两个 xpath 方程中使用“and”的示例,但我无法让它工作,要么它不返回任何内容,要么给出错误。

例如我有这个当前声明

HtmlNode table = doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr[3]//table[1]");
foreach (var cell in table.SelectNodes(".//tr//td").Skip(2))
{
     string cleanedHtml = cleaner(cell.InnerText.Trim());
     QuoteItems.Add(cleanedHtml);
}

现在,如果我想获得那个 Htmlnode,但指定从第一个 tr 到第六个 tr 的所有内容,我该怎么做?

即 我想要所有的东西

HtmlNode table = doc.DocumentNode.SelectSingleNode("//table[2]//tbody/tr[3]//table[1]");

HtmlNode table = doc.DocumentNode.SelectSingleNode("//table[2]//tbody/tr[6]//table[1]");

如前所述,我已经尝试过了,但我只是遇到了第一次机会例外。

"//table[2]//tbody/tr[position() >= 3 and position() <=6]//table[1]"

谁能指出我做错了什么?

【问题讨论】:

    标签: c# html xpath html-agility-pack


    【解决方案1】:

    在该表达式的中间放置一个and

    "//table[2]//tbody/tr[position() >= 3 and position() <=6]//table[1]"
    

    【讨论】:

    • 哦,哈哈。我确实有这个,但它只给了我在这种情况下的第一个元素,所以只有tr[3] 出现而不是tr[6]
    • @Austin,如果您对SelectSingleNode 只选择一个节点感到遗憾,请改用SelectNodes
    • @kjhughes 如何获得多个节点的单个元素?如果我做两个 foreach(包装一个 foreach 做上面的表达式),那么我会多次得到结果。有没有办法让 HtmlNode 成为多个节点,因为 HtmlNode 不能 = 节点集合 (.SelectNodes)。
    • AH 等待 nvm,我没有更新我的值。内部循环的 SelectNodes。 Ty Kj!
    • 不客气。让我们给拉尔斯一个应有的回报,并称之为结束。
    猜你喜欢
    • 2018-06-13
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多