【问题标题】:How to get values in XML data using Nokogiri?如何使用 Nokogiri 获取 XML 数据中的值?
【发布时间】:2012-11-02 02:50:57
【问题描述】:

我在创建用户后使用 Nokogiri 解析从 roar 引擎获取的 XML 数据。 XML 如下所示:

<roar tick="135098427907">
  <facebook>
    <create_oauth status="ok">
      <auth_token>14802206136746256007</auth_token>
      <player_id>8957881063899628798</player_id>
    </create_oauth>
   </facebook>
</roar>

我对 Nokogiri 完全陌生。如何获得statusauth_tokenplayer_id 的值?

【问题讨论】:

    标签: ruby nokogiri


    【解决方案1】:
    str = "<roar ......"
    doc = Nokogiri.XML(str)
    puts doc.xpath('//create_oauth/@status')  # => ok
    puts doc.xpath('//auth_token').text       # => 148....
    # player_id is the same as auth_token
    

    w3schools 学习一些好的 xpath 是个好主意。

    【讨论】:

    • 其实doc.xpath('//create_oauth/@status')返回的是一个NodeSet。一般最好使用:doc.at('create_oauth')[:status],这是一个字符串。
    【解决方案2】:

    这个怎么样

    h1 = Nokogiri::XML.parse %{
        <roar tick="135098427907">
      <facebook>
        <create_oauth status="ok">
          <auth_token>14802206136746256007</auth_token>
          <player_id>8957881063899628798</player_id>
        </create_oauth>
       </facebook>
    </roar>
    }
    
    
    h1.xpath("//facebook/create_oauth/auth_token").text()
    h1.xpath("//facebook/create_oauth/player_id").text()
    

    【讨论】:

      【解决方案3】:

      您可以使用Nori gem。它是一个 xml 到哈希的转换器,在 ruby​​ 中访问哈希非常方便

      require 'nori'
      
      Nori.parser = :nokogiri
      
      xml = "<roar tick='135098427907'>
                 <facebook>
                     <create_oauth status='ok'>
                         <auth_token>14802206136746256007</auth_token>
                         <player_id>8957881063899628798</player_id>
                     </create_oauth>
                 </facebook>
            </roar>"
      
      hash = Nori.parse(xml)
      create_oauth = hash["roar"]["facebook"]["create_oauth"]
      
      puts create_oauth["auth_token"] # 14802206136746256007
      puts create_oauth["@status"]    # ok
      puts create_oauth["player_id"]  # 8957881063899628798
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 2015-12-29
        • 2011-07-19
        相关资源
        最近更新 更多