Ruby Nokogiri:如何排除具有特定类名的HTML属性?

Ruby Nokogiri:如何排除具有特定类名的HTML属性?,ruby,html-parsing,nokogiri,Ruby,Html Parsing,Nokogiri,如果我想在Ruby中使用Nokogiri解析HTML块,如下所示: <th class="first">ancd</th> <th>xyz</th> <th>sdf</th> ancd xyz 自卫队 如何排除包含特定类名的标记?本例中的“第一个”。您可以使用CSS选择器: doc.css('th:not(.first)') 在这种简单的情况下,还可以使用xpath: doc.xpath('//th[not(@clas

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

<th class="first">ancd</th>
<th>xyz</th>
<th>sdf</th>
ancd
xyz
自卫队

如何排除包含特定类名的标记?本例中的“第一个”。

您可以使用CSS选择器:

doc.css('th:not(.first)')
在这种简单的情况下,还可以使用xpath:

doc.xpath('//th[not(@class="first")]')
不同之处在于xpath要求类名中有一个精确的匹配项。如果您有可能拥有多个类,例如,
,那么CSS选择器将识别它,但xpath不会(不会使它变得更复杂)

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

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

通常XPath比CSS选择器灵活得多,但这是一个支持CSS的HTML边缘案例。

这里有一个类似的SO帖子可能会有所帮助:您还可以排除多个类名吗?例如,如果我有:
xxy
xxz
当然,例如
doc.xpath('//th[not(@class=“first”)和not(@class=“second”))