与Nokogiri::XML::Element中一样,有一个名为attributes的方法可以将所有内容作为哈希获取。而对于NodeSet对象,则没有这样的方法,需要指定attribute key来获取其值。我知道xpath有提取属性的能力,但我想不出以下情况的解决方案:
通常,在匹配元素文档中只有一个属性称为匹配类型:
<D:match match-type="starts-with">appren</D:match>
但现在,我需要假设在这个元素标签中只允许matct类型的attr:
<D:match caseless="bogus" match-type="starts-with">appren</D:match>
我的想法是获取该元素中的所有属性,并找出"match-type"以外的属性的大小。
有什么我能做到的解决方案吗?谢谢
这不会直接回答您的问题,因为不清楚您是否尝试过任何东西。相反,可以修改此代码以执行您想要的操作,但您需要弄清楚要更改什么:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<body>
<a id="some_id" href="/foo/bar/index.html" class='bold'>anchor text</a>
<a id="some_other_id" href="/foo/bar/index2.html" class='italic'>anchor text</a>
</body>
</html>
EOT
doc.search('a').map{ |node| node.keys.reject{ |k| k == 'id' }.map{ |p| node[p].size }.inject(:+) } # => [23, 26]