Я использую Nokogiri для анализа большого файла XML. Скажем, у меня есть следующая структура:
<menagerie>
<penguin>Pablo</penguin>
<penguin>Mortimer</penguin>
<bull>Ferdinand</bull>
<aardvark>James Cornelius Madison Humphrey Zophar Handlebrush III</aardvark>
</menagerie>
Я могу посчитать не-пингвинов так:
xml.xpath('//menagerie//*[not(penguin)]').length // 2
Но как мне получить список таких тегов? (Точный формат не важен, я просто хочу визуально отсканировать не-пингвинов.)
bull
aardvark
Обновлять
Это дало мне список, который я хотел - спасибо Oded и TMN и delnan!
xml.xpath('//menageries/*[not(penguin)]').each do |node|
puts node.name()
end
xpath
дает вам совпадающие элементы (я полагаю, что это какая-то коллекция). Почему вы не можете получить атрибут.tagname
(или что-то подобное) каждого элемента? - person   schedule 18.01.2011grep
. Сбор имени тега каждого элемента. В Руби. Что-то вродеtags = xml.xpath(...).collect { |tag| tag.tagname}
. - person   schedule 18.01.2011xml.xpath(...).map(&:name)
в Ruby 1.9. - person Phrogz   schedule 19.01.2011foo.bar
, тоbar
всегда является вызовом метода. Но вы правильно заметили, что выполнение толькоbar()
менее двусмысленно для интерпретатора в случае ошибки, чемbar
. - person Phrogz   schedule 01.12.2011