如果我想在Ruby中使用Nokogiri解析HTML块,如下所示:
<th class="first">ancd</th>
<th>xyz</th>
<th>sdf</th>
如何排除包含某个类名的标记?这种情况下的"第一个"。
您可以使用CSS选择器:
doc.css('th:not(.first)')
在这种简单的情况下,您还可以使用xpath:
doc.xpath('//th[not(@class="first")]')
不同之处在于,xpath要求类名完全匹配。如果你有可能拥有多个类,例如<th class="red first">
,那么CSS选择器会识别它,但xpath不会识别它(不会让它变得更复杂)。
编辑:仅供参考,如果你想要一个元素上可能有多个类时可以选择一个类的xpath:
doc.xpath('//th[@class and contains(concat(" ",normalize-space(@class)," "), " first ")]')
通常XPath比CSS选择器灵活得多,但这是一种支持CSS的HTML边缘情况。