質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

2201閲覧

Xmlファイルから不特定のタグのノードを取得したいのですが

MonaohGentle

総合スコア11

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/09/06 01:53

Ruby初心者です。

以下のように記述されたXMLファイルからタグとノードを取り出してハッシュ配列に格納したいと考えています。

<object> <name>text-01</name> <type>text</type> . . . <string>abc</string> </object>

たとえば、<object>以下の<name>の"name"をkeyに、text-01をvalueとしてハッシュ配列に格納して、それを順番に</object>まで繰り返し、ハッシュ配列に格納していきたいのです。

なお、”<object>”と”</object>”は固定ですが、それ以外はxmlファイルを参照するまで、わからないものとします。

質問としては、以下の2点になります。

(1)RubyのREXML::Docunentメソッドを使って、Xpathを指定すれば要素を取得できるところまでは確認しましたが、不特定で現れる要素を取得するためのメソッドはありますか?

(2)XMLファイルから各ノードを取得してハッシュ配列に格納する場合、各要素をスタック等に一時保存しながら、ハッシュ配列に格納していきたいのです。
しかし、要素数が不明なため、実装方法がわかりません。

以上になります。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

get_elements("object/*")で配列で子ノードが取れますので、ループを回せばいいかと。

Ruby

1require "rexml/document" 2 3doc = REXML::Document.new(DATA) 4hash_data = doc.get_elements("object/*").each_with_object({}){|x,o| o[x.name]=x.text} 5p hash_data #=> {"name"=>"text-01", "type"=>"text", "string"=>"abc"} 6__END__ 7<object> 8<name>text-01</name> 9<type>text</type> 10<string>abc</string> 11</object>

投稿2016/09/06 02:20

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MonaohGentle

2016/09/06 02:54

otn様 ありがとうございます。希望している動きです。 doc.get_elements("object/*")...なのですね。 doc.elements("object/*")...として行き詰ってました。 get_elements, each_with_objectの使い方はこの機会に覚えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問