Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > yaml/ypathライブラリ > YAML::YPathクラス

class YAML::YPath

クラスの継承リスト: YAML::YPath < Object < Kernel

要約

YAML ドキュメントから特定のデータを検索する機能を提供するクラスです。

使用例;"name" を含むセグメントを表示する。

require 'yaml'

YAML.parse_documents(DATA){|doc|
  doc.search('/*//name').each {|node|
    YAML::YPath.each_path(node){|u|
      p u.segments
    }
  }
}

__END__
cat:
 - name: taro
   age: 7
 - name: jiro
   age: 23
---
dog:
 shiba:
  - name: goro
    age: 3
  - name: rokuro
    age: 1
# end of sample

参考

Rubyist Magazine: http://magazine.rubyist.net/

目次

特異メソッド
each_path new
インスタンスメソッド
flags flags= predicates predicates= segments segments=

特異メソッド

each_path(str) {|ypath| ...} -> Array[permalink][rdoc]

引数 str を YAML::YPath が 検索できる複数のパスに再構築して、その各パスに対してブロックを評価します。

各パスに対してブロックを評価した結果の配列を返します。

例1: YAML::YPath.each_path を使用する場合

require 'yaml'

path = "/*/((one|three)/name|place)|//place"
YAML::YPath.each_path(path) { |ypath|
  ...
}

例2: YAML::YPath.each_path を使用しない場合

require 'yaml'

["/*/one/name", "/*/three/name", "/*/place", "//place"].each do |path|
  ypath = YAML::YPath.new(path)
  ...
end
new(str) -> YAML::YPath[permalink][rdoc]

自身を初期化します。

[PARAM] str:
YPath でパース可能なパスを文字列で指定します。

例:

require 'yaml'

str = "/ugo[:hoge]/0/name"

p YAML::YPath.new(str)
#=> #<YAML::YPath:0x3238cc @predicates=[":hoge", nil, nil], @segments=["ugo", "0", "name"], @flags=nil>

インスタンスメソッド

flags -> nil[permalink][rdoc]

使用されていません。常に nil を返します。

flags=(val)[permalink][rdoc]

使用されていません。

predicates -> [String][permalink][rdoc]

self.segments の同じ位置に対応する検索条件を文字列の配列で返します。

predicates=(val)[permalink][rdoc]

self.segments の同じ位置に対応する検索条件を文字列の配列で設定します。

[PARAM] val:
検索条件を文字列の配列で指定します。
segments -> [String][permalink][rdoc]

検索するパスを / で区切った文字列の配列を返します。

segments=(val)[permalink][rdoc]

検索するパスを文字列の配列で設定します。

[PARAM] val:
文字列の配列を指定します。