使用hpricot解析XML,获取属性

时间:2009-10-20 13:18:20

标签: xml hpricot

我的xml:

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

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

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

2 个答案:

答案 0 :(得分:1)

解析XML时,

XPath将是一个很大的帮助。看起来像hpricot has support for it,所以非常容易。

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

/forecast_information/city/@data

表达式说,在名为data的元素中找到名为@的属性(这就是city符号的含义),该属性又位于名为{{1}的元素内部}。

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

forecast_information

这个表达式说,在名为//city/@data 的元素中找到名为data的属性,无论源XML中的city在哪里。

答案 1 :(得分:1)

选择的答案对我不起作用,但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