要約
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/
- プログラマーのための YAML 入門 (探索編): http://magazine.rubyist.net/?0013-YAML
目次
- 特異メソッド
- インスタンスメソッド
特異メソッド
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:
- 文字列の配列を指定します。