使用Html Agility Pack,选择循环中的当前元素(XPATH)

Ate*_*eik 1 .net html c# xpath html-agility-pack

我正在尝试做一些简单的事情,但不知何故它对我不起作用,这是我的代码:

var items = html.DocumentNode.SelectNodes("//div[@class='itembox']");
foreach(HtmlNode e in items)
{

     int x = items.count; // equals 10
     HtmlNode node = e;
     var test = e.SelectNodes("//a[@class='head']");// I need this to return the 
                                                // anchor of the current itembox 
                                                // but instead it returns the
                                                // anchor of each itembox element
     int y =test.count; //also equals 10!! suppose to be only 1
}
Run Code Online (Sandbox Code Playgroud)

我的html页面如下所示:

....
<div class="itembox">
    <a Class="head" href="one.com">One</a>
</div>
<div class="itembox">
    <a Class="head" href="two.com">Two</a>
</div>
<!-- 10 itembox elements-->
....
Run Code Online (Sandbox Code Playgroud)

我的XPath表达式错了吗?我错过了什么吗?

Bro*_*ass 5

使用

var test = e.SelectNodes(".//a[@class='head']");
Run Code Online (Sandbox Code Playgroud)

代替.您当前的代码(//a[])搜索从根节点开始的所有元素.如果在前面加上一个点而不是(.//a[]),则只考虑当前节点的后代.因为在你的情况下它是一个直接的孩子,你当然也可以这样做:

var test = e.SelectNodes("a[@class='head']");
Run Code Online (Sandbox Code Playgroud)

一如既往地查看Xpath规范以获取详细信息.