如何获取具有多个css类的html元素

sea*_*ong 41 html-agility-pack

我知道如何获得相同css类的DIV列表,例如

<div class="class1">1</div>
<div class="class1">2</div>
Run Code Online (Sandbox Code Playgroud)

使用xpath //div[@class='class1']

但是如果div有多个类,例如

<div class="class1 class2">1</div>
Run Code Online (Sandbox Code Playgroud)

xpath会是什么样的呢?

Ioa*_*mas 88

您正在寻找的表达方式是:

//div[contains(@class, 'class1') and contains(@class, 'class2')]
Run Code Online (Sandbox Code Playgroud)

我强烈建议使用XPath可视化工具,它可以帮助您轻松调试xpath表达式.在这里能找到它:

http://xpathvisualizer.codeplex.com/

  • 好吧,如果确实有必要你可以做`contains(concat('',@ class,''),'class1')`等等,但正如我所说,很容易避免这种需要. (5认同)
  • 此解决方案的一个小问题是,如果可能的类名是另一个的子字符串,则可能会中断。例如,如果您也有“ class11”,它将错误地匹配它,因为它包含“ class1”。不过,这很容易避免,只需确保类名彼此不包含即可。 (4认同)

Vic*_*yew 6

根据这个答案,它解释了为什么确保不包括正在寻找的类名的子字符串很重要,正确的答案应该是:

//div[contains(concat(' ', normalize-space(@class), ' '), ' class1 ')
    and contains(concat(' ', normalize-space(@class), ' '), ' class2 ')]
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。 (2认同)