Ruby の REXML についての質問です。

いろいろ調べましたが分からなかったので質問させていただきます。

<root>
 <a>
  <b1>
   <c>Apple</c>
  </b1>
  <b2>
   <c>Orange</c>
  </b2>
 </a>
</root>

例えば上記のようなXMLで、文字列「Apple」が root/a/b1/c にあり、
文字列「Orange」が root/a/b2/c にあることはどうやって知れるでしょうか?

つまり、ノードの中身を検索キーにして、
ノードの場所を知る関数とかってあるんでしょうか?

Xpathをかろうじて使ってるくらいの実力ですので、
もし難しい内容なら詳細にお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/22 23:22:24
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:nuna No.1

回答回数32ベストアンサー獲得回数11

ポイント60pt

パスは REXML::Element#xpath で取得できますよ。

XPath でノードを探して、そのノードの xpath メソッドを呼んでください。

#!/usr/bin/ruby

require 'rexml/document'

doc = REXML::Document.new(File.new(ARGV.shift))

node = REXML::XPath.first(doc, '//[text()="Apple"]')

puts node.xpath

$ ruby foo.rb bar.xml

/root/a/b1/c

id:RESTfulJapan

できました!

ありがとうございました!

2009/11/22 23:22:05

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません