Ruby yaml ypath как xpath?
Привет, у меня есть файл 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"?
Спасибо
Ответы
Ответ 1
Файл 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
.
Ответ 2
Там есть действительно такая вещь, как YPath: github.com/peterkmurphy/YPath-Specification
И это реализовано в Ruby YAML lib; см. документ для поиска BaseNode #.
Ответ 3
Если Ruby не является жестким ограничением, вы можете взглянуть на инструмент dpath.
Он предоставляет xpath-подобный язык запросов для YAML (и других) файлов. Возможно, позвоните
он внешне фильтрует ваши данные.