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

时间:2010-09-03 20:29:15

标签: ruby xml xpath nokogiri

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

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

@doc = Nokogiri::HTML::DocumentFragment.parse <<-EOHTML
<body>
  <h1 blah="afadf">Three's Company</h1>
  <div>A love triangle.</div>
   <b blah="adfadf">test test test</b>
</body>
EOHTML

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

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

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

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

2 个答案:

答案 0 :(得分:7)

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

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

当他们说

时,DZone片段令人困惑
elements = @doc.xpath("//*[@*[attribute_name]]")

内部方括号不是文字......它们表示你输入了属性名称。外方括号文字。 :-P

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

你想要的是

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

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

答案 1 :(得分:3)

您可以使用CSS选择器:

elements = @doc.css "[blah]"