【问题标题】:Ruby - Finding Elements with REXMLRuby - 使用 REXML 查找元素
【发布时间】:2012-07-03 16:32:39
【问题描述】:

我有一个 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

【问题讨论】:

    标签: ruby xml rexml


    【解决方案1】:
    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
    

    属性用于

    <store store_name="mystore" 
    

    得到

    element.attributes["store_name"]
    

    编辑,抱歉试试这个

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

    根据评论,正确的语法是dialog.elements['name'].text

    【讨论】:

    • 当我第一次查看代码时,我认为它可能会正常工作,但每当我调用 element.attributes["name"] 时,它都会返回一个空值。
    • 它与“element.name.text”不太兼容,但我使用“dialog.elements['name'].text”让它工作了,不过感谢您的帮助!
    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      相关资源
      最近更新 更多