使用特定类和属性设置为特定值的SelectNodes

时间:2018-10-11 10:52:51

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

我有以下代码来查找HTML中的某些元素,并对具有特定属性的元素执行某些操作:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlString);

foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//div[contains(@class,'item')]"))
{
    var hasAttachments = div.Attributes.FirstOrDefault(a => a.Name.Equals("hasattachments"));
    if (hasAttachments.Value.Equals("True"))
    {
        var itemId = div.Attributes.FirstOrDefault(a => a.Name.Equals("itemid")).Value;
        doStuffWithItemId(itemId);
    }
}

我想知道是否可以合并我的查询以找到具有类和类的属性值设置为"True"的元素,就像这样:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlString);

foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//div[contains(@class,'item')] and //div[@data-hasattachments=\"True\"]"))
{
    var itemId = div.Attributes.FirstOrDefault(a => a.Name.Equals("itemid")).Value;
    doStuffWithItemId(itemId);
}

1 个答案:

答案 0 :(得分:1)

这实际上不是HAP问题,而是xPath。您甚至可以在chrome开发工具中轻松测试xPath。同样,您在正确的道路上只需要将and放在另一层即可。我尝试了一些模拟数据,对我有用。

//div[contains(@class,'item') and @data-hasattachments="True"]

这是一个相关的SO帖子。 XPath with multiple conditions