Alright I have an xml document that looks something like this:
<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>
I am using ruby’s lib-xml to parse it. I want to find if there is a partner with the name ‘Some Name’ in a quick and ruby idiomatic way.
How can I do this in one line or ruby code, assuming i have a the document parsed in a variable named document.. Such that i can call document.find(xpath) to retrieve nodes. I have had to do this multiple times in slightly different scenarios and now its starting to bug me.
I know i can do the following (but its ugly)
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')
but i find this really ugly. I thought about using the enumeration include? mixin method but that still won’t work because I need to get the .content field of each node as opposed to the actual node… While writing this, I though of this (but it seems somewhat inefficient albeit elegant)
found = document.find('//partner/name').collect{|name| name.content}.member?('Some Name')
Are there any other ways of doing this?
What about this?