2014-10-06 30 views
1

我想弄清楚指定一个范围的节点。我在两个xpath方程中看到了使用“和”的例子,但是我无法使它工作,要么返回nothihng要么给出错误。指定节点范围 - Xpath/Html敏捷包

例如,我有这个当前语句

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到第6 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]" 

有人能指出我做错了什么吗?

回答

3

把一个and在表达式中:

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

哦咄哈哈。我确实有这个,但它只是给了我这种情况下的第一个元素,所以只出现'tr [3]'而不是'tr [6]'。 – Austin 2014-10-06 18:25:17

+1

@奥斯汀,如果你感叹'SelectSingleNode'只选择一个节点,请改用'SelectNodes'。 – kjhughes 2014-10-06 19:53:15

+0

@kjhughes如何获得多个节点的单个元素?如果我做了两个foreach(包装一个foreach做上面的表达式),然后我多次得到结果。有没有办法像HtmlNode一样使多个节点,因为HtmlNode不能=节点集合(.SelectNodes)。 – Austin 2014-10-06 19:59:23