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

时间:2012-03-02 18:44:09

标签: ruby html-parsing nokogiri

如果我想在Ruby中使用Nokogiri解析HTML块:

<th class="first">ancd</th>
<th>xyz</th>
<th>sdf</th>

如何排除包含某个类名的标记?在这种情况下的“第一”。

1 个答案:

答案 0 :(得分:7)

您可以使用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边缘情况。