【问题标题】:Search/check values in YAML document with Ruby使用 Ruby 在 YAML 文档中搜索/检查值
【发布时间】:2013-01-27 13:51:04
【问题描述】:

我的目标:

  • 使用 ypath/xpath 检查 yaml 文档是否包含特定键的值
  • 使用 ypath/xpath 为指定键选择值
  • 文档 yaml

    app:
        name: xxx
        version: xxx
    description:
        author:
            name: xxx
            surname: xxx
            email: xxx@xxx.xx
    

    检查的内容:*

  • 谷歌
  • 堆栈溢出
  • Ruby API(YAML::DBM 作为它提供的方法之一是select
  • 示例:

    Module::Class.select('description/author/name')
    Module::Class.select('*/name')
    Module::Class.isset?('*/name')
    

    【问题讨论】:

      标签: ruby yaml psych


      【解决方案1】:

      使用yaml:

      require 'yaml'
      yml = YAML.load_file('your_file.yml')
      

      现在 yml 是一个哈希。您可以像使用它一样使用它。这是您尝试的简单而丑陋的解决方案:

      if !yml["description"].nil? && !yml["description"]["author"].nil? && !yml["description"]["author"]["name"].nil? && !yml["description"]["author"]["name"].empty?
        puts "An author is set!"
      end
      

      【讨论】:

      • 您好,谢谢回复,但这不是我的意思,我已经更新了我的目标部分。 BR。
      • 抱歉链接到错误的答案。看这里:stackoverflow.com/a/9977987/812912
      • 是的,我也看到了,但问题是该 pdf 中没有附加示例。
      • 你看过用户引用的rdoc吗?
      • 当然,但不幸的是,它没有以示例的方式(工作的东西)很好地记录下来。除非有人已经在 Ruby YAML 中使用过 ypath,否则我将不得不深入挖掘并尝试找到正确的方法......但我宁愿不从一开始就发明轮子 :)
      【解决方案2】:

      由于没有最新的 YPath 实现,我建议给ActiveSupportNokogiri 一个机会:

      yml = LOAD_YML_WITH_YOUR_PREFERRED_YAML_ENGINE
      
      # ActiveSupport adds a to_xml method to Hash
      xml = yml.to_xml(:root => 'yaml')
      
      doc = Nokogiri::XML(xml)
      doc.xpath("description/author/name").map do |name|
        puts [name['key'], name['value']]
      end
      

      【讨论】:

      • 是的,不能使用 YPath。我尝试使用 YAML/Psych::DBM 没有运气。我已经结束了使用 XML 而不是 YAML 和 Nokogiri gem。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2013-01-13
      • 2013-10-19
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多