Как я могу использовать Ruby для легкого анализа XML, чтобы запрашивать и находить определенные значения тегов? - PullRequest
3 голосов
/ 02 сентября 2010

Я работаю с 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>

Ответы [ 4 ]

4 голосов
/ 02 сентября 2010

Это может дать вам толчок к началу:

#!/usr/bin/env ruby

require 'nokogiri'

XML = %{<?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:/foo.png</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>}

doc = Nokogiri::XML(XML)

doc.search('//person').each do |person|
    firstname   = person.at('first-name').text
    puts "firstname: #{firstname}"
end
# >> firstname: Bill
# >> firstname: Ed

Идея в том, что вы перебираете секцию, которая повторяется, в данном случае, «человек». Затем вы выбираете нужные разделы и извлекаете текст. Я использую .at () от Nokogiri, чтобы получить первое вхождение, но есть и другие способы сделать это.

На сайте Nokogiri есть хорошие примеры и хорошо написанная документация, поэтому обязательно потратьте немного времени на его изучение. Тебе должно быть легко.

1 голос
/ 02 сентября 2010

nokogiri - действительно хороший парсер xml для ruby, который позволяет вам использовать селекторы xpath или css3 для доступа к вашему xml, но это не преобразователь xml в объект

есть проектназывается xml-mapping , который делает именно это, определяя выражения xpath, которые должны быть сопоставлены со свойствами объекта - и наоборот.

1 голос
/ 02 сентября 2010

Вот как Я сделал это для Ruby Challenge, используя встроенный REXML.

Это в основном код синтаксического анализа для всего документа:

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) }
0 голосов
/ 02 сентября 2010

http://nokogiri.org/ - вариант, который вам следует изучить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...