Nokogiri:如何使用某些类名排除HTML属性?

Tej*_*tha 2 ruby html-parsing nokogiri

如果我想在Ruby中使用Nokogiri解析HTML块,如下所示:

<th class="first">ancd</th>
<th>xyz</th>
<th>sdf</th>
Run Code Online (Sandbox Code Playgroud)

如何排除包含特定类名的标记?在这种情况下的"第一".

Mar*_*mas 8

您可以使用CSS选择器:

doc.css('th:not(.first)')
Run Code Online (Sandbox Code Playgroud)

在这个简单的例子中,您还可以使用xpath:

doc.xpath('//th[not(@class="first")]')
Run Code Online (Sandbox Code Playgroud)

不同之处在于xpath需要在类名中完全匹配.如果你有可能有多个类,例如<th class="red first">然后CSS选择器将识别它,但xpath不会(没有使它更复杂).

编辑:仅供参考,如果您希望xpath可以在元素上有多个类时选择一个类:

doc.xpath('//th[@class and contains(concat(" ",normalize-space(@class)," "), " first ")]')
Run Code Online (Sandbox Code Playgroud)

通常,XPath比CSS选择器更灵活,但这是一个支持CSS的HTML边缘情况.