Привет у меня есть yaml файл как так
---
data:
- date: "2004-06-11"
description: First description
- date: "2008-01-12"
description: Another descripion
Как я могу сделать запрос "ypath", подобный xpath для xml? Что-то как "получает описание, где дата 11.06.2004"
YAML.parse_file('myfile.yml').select('/data/*/date == 2004-06-11')
Как дела это, и если это возможно, как я могу так же отредактировать описание 'ypath'?
Спасибо
Файл 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 "] =" новое описание "
, а затем сериализуйте хэш обратно в YAML, используя hash.to_yaml
.
Если Ruby не является жестким ограничением, вы можете взглянуть на инструмент dpath. Он предоставляет xpath-подобный язык запросов к YAML (и другим) файлам. Возможно, вы вызовете его извне для фильтрации данных.