Хорошо, у меня есть XML-документ, который выглядит примерно так:
<xml>
<list>
<partner>
<name>Some Name</name>
<status>active</status>
<id>0</id>
</partner>
<partner>
<name>Another Name</name>
<status>active</status>
<id>1</id>
</partner>
</list>
</xml>
Я использую lib-xml в ruby для его анализа.
Я хочу выяснить, есть ли партнер с именем «Некоторое имя» быстрым и рубиновым идиоматическим способом.
Как я могу сделать это в одной строке или в коде ruby, при условии, что у меня есть документ, проанализированный в переменной с именем document. Мне приходилось делать это несколько раз в немного разных сценариях, и теперь это начинает меня беспокоить.
Я знаю, что могу сделать следующее (но это уродливо)
found = false
document.find('//partner/name').each do |name|
if (name.content == 'Some Name')
found = true
break
end
end
assert(found, "Some Name should have been found")
но я нахожу это действительно безобразным. Я думал об использовании перечисления включить? Метод mixin, но это все равно не сработает, потому что мне нужно получить поле .content каждого узла, а не фактического узла ...
При написании этого я думал об этом (но это выглядит несколько неэффективно, хотя и элегантно)
found = document.find('//partner/name').collect{|name| name.content}.member?("Some Name")
Есть ли другие способы сделать это?