ruby yaml ypath как xpath? - PullRequest
       15

ruby yaml ypath как xpath?

12 голосов
/ 20 марта 2010

Привет, у меня есть файл yaml, вот так

---
data:
  - date: "2004-06-11"
    description: First description

  - date: "2008-01-12"
    description: Another descripion

Как мне сделать запрос "ypath", аналогичный xpath для xml? Что-то типа "получить описание, где дата 2004-06-11"

YAML.parse_file('myfile.yml').select('/data/*/date == 2004-06-11')

Как вы это делаете, и если это возможно, как я могу аналогичным образом отредактировать описание с помощью ypath?

Спасибо

Ответы [ 3 ]

12 голосов
/ 02 апреля 2012

Там есть действительно такая вещь, как YPath: github.com / peterkmurphy / YPath-Specification

И это реализовано в Ruby YAML lib; см. документ по BaseNode # search.

4 голосов
/ 24 июня 2010

Если Ruby не является жестким ограничением, вы можете взглянуть на dpath Он обеспечивает xpath-подобный язык запросов для файлов YAML (и других). Может позвонить это внешне для фильтрации ваших данных.

3 голосов
/ 20 марта 2010

Файл yaml описывает отображение хеша из строк в массивы хешей, которые отображаются из строк в строки. Для вложенных хэшей не существует такого понятия, как xpath (по крайней мере, в стандартной библиотеке), но это достаточно просто при использовании стандартных методов Hash и Enumerable:

hash = YAML.load_file('myfile.yml')
item = hash["data"].find {|inner_hash| inner_hash["date"] == "2004-06-11"}
#=> {"date"=>"2004-06-11", "description"=>"First description"}

Чтобы изменить описание, вы можете просто сделать item["description"] = "new description" и затем сериализовать хэш обратно в YAML, используя hash.to_yaml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...