用REXML查找Ruby元素

用REXML查找Ruby元素,ruby,xml,rexml,Ruby,Xml,Rexml,我有一个XML文件,其中包含特定城市中零售商店及其位置的信息,但从中检索数据时遇到了一些问题。问题是我可以通过名称元素循环找到商店的名称,但我不知道在找到我要找的商店后如何获得相应的地址。有人知道怎么做吗?我使用REXML作为我的主要XML模块。下面是我的XML文件和代码的样子 XML: <stores> <store> <name>Supermarket</name> <address>2136 56th Aven

我有一个XML文件,其中包含特定城市中零售商店及其位置的信息,但从中检索数据时遇到了一些问题。问题是我可以通过名称元素循环找到商店的名称,但我不知道在找到我要找的商店后如何获得相应的地址。有人知道怎么做吗?我使用REXML作为我的主要XML模块。下面是我的XML文件和代码的样子

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>
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
属性用于

<store store_name="mystore" 
编辑,抱歉,请尝试此

根据注释,正确的语法是
dialog.elements['name']。text

属性用于

<store store_name="mystore" 
编辑,抱歉,请尝试此


根据注释,正确的语法是dialog.elements['name']。text

以下是我的观点//name/。”选择所有“name”节点的父节点。if语句根据输入检查name节点的文本(本例中为匹配的_名称)。在块的其余部分显示或存储名称和地址数据:

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

这是我的看法//name/。”选择所有“name”节点的父节点。if语句根据输入检查name节点的文本(本例中为匹配的_名称)。在块的其余部分显示或存储名称和地址数据:

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

当我第一次查看代码时,我认为它可能会工作,但每当我调用element.attributes[“name”]时,它都会返回一个空值。它与“element.name.text”不太兼容,但我使用“dialog.elements['name'].text”来工作,不过谢谢您的帮助!当我第一次查看代码时,我认为它可能会工作,但每当我调用element.attributes[“name”]时,它都会返回一个空值。它与“element.name.text”不太兼容,但我使用“dialog.elements['name'].text”来工作,不过谢谢您的帮助!
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