使用Nokogiri获取包含特定属性名称的元素中的所有节点

我想使用Nokogiri来提取包含特定属性名称的元素中的所有节点。

例如,我想在下面的文档中找到包含属性“blah”的2个节点。

@doc = Nokogiri::HTML::DocumentFragment.parse <<-EOHTML  

Three's Company

A love triangle.
test test test EOHTML

我在这个网站上找到了这个建议(见下文): http : //snippets.dzone.com/posts/show/7994 ,但它没有返回上面例子中的2个节点。 它返回一个空数组。

 # get elements with attribute: elements = @doc.xpath("//*[@*[blah]]") 

关于如何做到这一点的想法?

谢谢! 我在这里找到了这个

 elements = @doc.xpath("//*[@*[blah]]") 

这不是一个有用的XPath表达式。 它表示为所有具有属性的元素提供了名为’blah’的子元素。 由于属性不能包含子元素,因此该XPath永远不会返回任何内容。

当他们说时,DZone片段令人困惑

 elements = @doc.xpath("//*[@*[attribute_name]]") 

内部方括号不是文字的……它们表示你输入了属性名称。 外方括号字面的。 😛

@之后,他们还有一个额外的*

你想要的是什么

 elements = @doc.xpath("//*[@blah]") 

这将为您提供具有名为“blah”属性的所有元素。

您可以使用CSS选择器:

 elements = @doc.css "[blah]"