【问题标题】:Parse XML with hpricot, get attributes用 hpricot 解析 XML,获取属性
【发布时间】:2011-12-21 04:12:38
【问题描述】:

我的 xml:

http://www.google.ru/ig/api?weather=Chelyabinsk

<forecast_information>
  <city data="Chelyabinsk, Province of Chelyabinsk"/>
</forecast_information>

例如如何获取城市数据?不是inner_html,只是城市数据、邮政编码等属性。

【问题讨论】:

    标签: xml hpricot


    【解决方案1】:

    XPath 在解析 XML 时会有很大帮助。看起来像hpricot has support for it,所以非常简单。

    city 元素中提取data 属性的XPath 表达式如下:

    /forecast_information/city/@data
    

    表达式说,在名为city 的元素内找到名为data 的属性(这就是@ 符号的含义),而该元素又在名为forecast_information 的元素内。

    现在,您在 google.ru 上链接的 XML 比您在此处发布的示例更复杂。要从中提取相同的信息,请使用以下表达式:

    //city/@data
    

    此表达式表示,无论city 在源 XML 中的哪个位置,都在名为 city 的元素内找到名为 data 的属性。

    【讨论】:

      【解决方案2】:

      选择的答案对我不起作用,但 xpath 部分让我走上了正轨。这就是我最终得到的结果:

      doc = Hpricot::XML(xml)
      result = doc.at("//city")['data']
      

      这是我在 ruby​​ 中针对这样的 xml 元素的完整解析器:

        <Response Field1="abc" Field2="123">
      
        def parse(xml)
          vars = {}
          fields = %w[Field1 Field2 Field3]
          doc = Hpricot::XML(xml)
          for field in fields
            vars[field] = doc.at("//Response")[field]
          end
          return vars
        end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-29
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        • 2017-05-02
        • 2012-04-14
        • 2011-12-06
        相关资源
        最近更新 更多