【问题标题】:How can I use Ruby to parse through XML easily to query and find certain tag values?如何使用 Ruby 轻松解析 XML 以查询和查找某些标记值?
【发布时间】:2010-09-02 04:57:02
【问题描述】:

我正在使用 API,想知道如何根据标签轻松搜索和显示/格式化输出。

例如,这里是带有 API 和 XML 输出示例的页面:

http://developer.linkedin.com/docs/DOC-1191

我希望能够将每条记录视为一个对象,例如 User.first-name User.last-name 以便我可以显示和存储信息并进行搜索。

有没有什么宝石可以让这件事变得更容易?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<people-search>
  <people total="108" count="10" start="0">
    <person>
      <id>tePXJ3SX1o</id>
      <first-name>Bill</first-name>
      <last-name>Doe</last-name>
      <headline>Marketing Professional and Matchmaker</headline>
      <picture-url>http://media.linkedin.com:/....</picture-url>
    </person>
    <person>
      <id>pcfBxmL_Vv</id>
      <first-name>Ed</first-name>
      <last-name>Harris</last-name>
      <headline>Chief Executive Officer</headline>
    </person>
     ...
  </people>
  <num-results>108</num-results>
</people-search>

【问题讨论】:

    标签: ruby xml parsing


    【解决方案1】:

    这可能会给你一个快速的开始:

    #!/usr/bin/env 红宝石 需要'nokogiri' XML = %{tePXJ3SX1o比尔Doe营销专家和媒人http://media.linkedin.com:/foo.png人> pcfBxmL_Vv埃德名字> 哈里斯姓氏> 首席执行官人> 人> 108} doc = Nokogiri::XML(XML) doc.search('//person').each 做 |person| firstname = person.at('first-name').text 把“名字:#{名字}” 结尾 # >> 名字:比尔 # >> 名字:Ed

    我们的想法是循环遍历重复的部分,在这种情况下是“人”。然后你选择你想要的部分并提取文本。我正在使用 Nokogiri 的 .at() 来获得第一次出现,但还有其他方法可以做到这一点。

    Nokogiri 网站有很好的示例和编写良好的文档,因此请务必花点时间阅读它。你应该会觉得这很容易。

    【讨论】:

      【解决方案2】:

      nokogiri 是一个非常好的 ruby​​ xml 解析器,它允许您使用 xpath 或 css3 选择器来访问您的 xml,但它不是 xml 到对象的映射器

      有一个名为 xml-mapping 的项目正是这样做的,它通过定义应该映射到对象属性的 xpath 表达式 - 反之亦然。

      【讨论】:

      • hmmm...我想知道 nokogiri 是否可以工作,你能给我一个使用linkedin输出的xml类型的例子吗?
      【解决方案3】:

      This is how 我使用内置的 REXML 为 Ruby Challenge 做的。

      这基本上是整个文档的解析代码:

      doc = REXML::Document.new File.new cia_file
      doc.elements.each('cia/continent') { |e| @continents.push Continent.new(e) }
      doc.elements.each('cia/country') { |e| @countries.push Country.new(self, e) }
      

      【讨论】:

        【解决方案4】:

        http://nokogiri.org/ 是您应该调查的选项

        【讨论】:

        • 是的,我对 Nokogiri 很熟悉,但我似乎无法指定标签,它“循环”并且我必须数数......所以它的行为不像一个对象。 ..我误会了吗?
        • 阅读 XPath。它非常强大,你应该可以用它准确地提取出你想要的东西。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-24
        • 1970-01-01
        相关资源
        最近更新 更多