简体   繁体   中英

Ruby - Finding Elements with REXML

I have an XML file that holds information about retail stores in a particular city and their locations but I'm having some trouble retrieving data from it. The problem is I can find stores by their names by looping through the name elements but I don't know how to get the corresponding addresses once I find the stores I'm looking for. Does anyone know how to do this? I'm using REXML as my main XML module. Here's what my XML file and my code look like

XML:

<stores>
  <store>
    <name>Supermarket</name>
    <address>2136 56th Avenue</address>
  </store>
  <store>
    <name>Convenience Store</name>
    <address>503 East Avenue</address>
  </store>
  <store>
    <name>Pharmacy</name>
    <address>212 Main Street</address>
  </store>
</stores>

Ruby:

xml_file.elements.each('stores/store/name') do |name|
  if input == name
    print name + "\n"
    #code to retrieve the address
    print address + "\n\n"
  end
end
xml_file = Document.new File.new("myxml.xml")

xml_file.elements.each("stores/store") do |element| 
  if element.attributes["name"] == input
    puts element.attributes["address"]
  end
end

attributes are for

<store store_name="mystore" 

to get

element.attributes["store_name"]

Edit, sorry try this

xml_file.elements.each("stores/store") do |element| 
  if element.name.text == input
    puts element.address.text
  end
end

Based on comment, the correct syntax is dialog.elements['name'].text

Here's my take. '//name/..' selects the parent node of the all the 'name' nodes. The if statement is checking the text of the name node against your input (matched_names in this example). Display or store the name and address data as you will in the rest of the block:

matched_names = ['Convenience Store', 'Pharmacy']

doc.elements.each('//name/..') do |parent|
  if (matched_names.include? parent.elements['name/text()'].to_s)
    puts parent.elements['name']
    puts parent.elements['address']
  end
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM