使用 hpricot 解析 XML,获取属性

发布于 2024-08-08 12:41:16 字数 353 浏览 6 评论 0原文

我的 xml:

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

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

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

My xml:

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

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

How to get city data for example? Not inner_html, just attributes like city data, postal code etc.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

所有深爱都是秘密 2024-08-15 12:41:16

XPath 在解析 XML 时会有很大帮助。看起来hpricot 支持它,所以它非常简单。

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

/forecast_information/city/@data

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

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

//city/@data

该表达式表示,在名为 city 的元素中查找名为 data 的属性,无论 city 位于源 XML 中。

XPath will be a big help when parsing XML. Looks like hpricot has support for it, so it's incredibly easy.

The XPath expression to extract the data attribute inside a city element is as follows:

/forecast_information/city/@data

The expression says, find the attribute named data (that's what the @ sign means) inside the element named city, which is in turn inside the element named forecast_information.

Now, the XML you linked on google.ru is more complicated than the example you posted here. To extract the same information from it, use this expression:

//city/@data

This expression says, find the attribute named data inside the element named city, no matter where city is in the source XML.

挖鼻大婶 2024-08-15 12:41:16

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

The selected answer didn't work for me, but the xpath part put me on the right track. This is what I ended up with:

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

Here is my full parser in ruby for an xml element like this:

  <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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文