【问题标题】:ruby yaml ypath like xpath?像xpath一样的ruby yaml ypath?
【发布时间】:2011-01-29 20:14:23
【问题描述】:

嗨,我有一个这样的 yaml 文件

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

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

如何执行类似于 xpath for xml 的“ypath”查询?类似“获取日期为 2004-06-11 的描述”

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

你是怎么做的,如果可能的话,我如何类似地通过“ypath”编辑描述?

谢谢

【问题讨论】:

    标签: ruby yaml


    【解决方案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",然后使用 hash.to_yaml 将哈希序列化回 YAML。

    【讨论】:

      【解决方案2】:

      如果 Ruby 不是硬约束,您可以查看dpath 工具。 它为 YAML(和其他)文件提供了一种类似 xpath 的查询语言。也许打电话 它在外部过滤您的数据。

      【讨论】:

      • 我通过这个问题发现了 dpath - 正是我想要的。谢谢你!根据问题检索 yaml:> cpanm App::DPath > dpath '/data/*/date[value == "2004-06-11"]/..' data.yml
      【解决方案3】:

      确实有这样的东西,例如 YPath:github.com/peterkmurphy/YPath-Specification

      它是在 Ruby 的 YAML 库中实现的;请参阅 BaseNode#search 的文档。

      【讨论】:

      猜你喜欢
      • 2021-08-28
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多