Rails(5系)を使ったアプリケーションで、画面からアップロードされたXMLファイルをHash型で読み込みたい場合の実装例です。
アップロードするXMLファイル
今回は検証用に以下のXMLファイルを使用
<?xml version="1.0" encoding="UTF-8"?>
<items>
<item>AAA</item>
<item>BBB</item>
<item>CCC</item>
</items>
html.erbの記述
適当にファイルとボタンタグを配置します。(デザイン・スタイルはお好みでどうぞ!)
<%= form_tag xxx_path, multipart: true do %>
<label>XMLファイルの読み込み</label>
<div class="row">
<div class="col-sm-2">
<%= file_field_tag :file, class: 'btn btn-primary' %>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<%= submit_tag '送信', class: 'btn btn-primary' %>
</div>
</div>
<% end %>
Controller.rbの記述
xml = REXML::Document.new(File.new(params[:file].path).read)
xml_h = Hash.from_xml(xml.to_s)
上記の結果以下のようなHash形式でファイルの中身を取得できます。
{"items"=>{"item"=>["AAA", "BBB", "CCC"]}}