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

use*_*146 4 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
Run Code Online (Sandbox Code Playgroud)

我发现这个建议(下)在这个网站:http://snippets.dzone.com/posts/show/7994,但它并不在本例中返回到上面的2个节点.它返回一个空数组.

# get elements with attribute:
elements = @doc.xpath("//*[@*[blah]]")
Run Code Online (Sandbox Code Playgroud)

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

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

Lar*_*rsH 7

elements = @doc.xpath("//*[@*[blah]]")
Run Code Online (Sandbox Code Playgroud)

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

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

elements = @doc.xpath("//*[@*[attribute_name]]")
Run Code Online (Sandbox Code Playgroud)

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

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

你想要的是什么

elements = @doc.xpath("//*[@blah]")
Run Code Online (Sandbox Code Playgroud)

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