1

特定の都市の小売店とその場所に関する情報を保持する XML ファイルがありますが、そこからデータを取得するのに問題があります。問題は、name 要素をループして名前で店舗を見つけることができることですが、探している店舗を見つけたら、対応する住所を取得する方法がわかりません。誰もこれを行う方法を知っていますか? 私はメインの XML モジュールとして REXML を使用しています。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
4

2 に答える 2

3
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

于 2012-07-03T17:06:06.017 に答える
1

これが私の見解です。'//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
于 2012-07-03T17:39:09.210 に答える