Ruby Rexml получить дочерний элемент

Мне нужно проанализировать XML-документ в ruby, используя rexml, который имеет следующую структуру:

<events>
    <event>
        <title>Best NYC New Year's Party</title>
        <description>Come spend New Year's Eve with us!</description>
        <category>conferences</category>
        <tags>new year, party</tags>
        <start_date>2008-12-31 20:00:00</start_date>
        <end_date>2009-01-01 06:00:00</end_date>
        <venue>
            <name>Madison Square Garden</name>
            <address>4 Penn Plaza</address>
            <city>New York</city>
            <country>United States</country>
        </venue>
    </event>
</events>

Я использую этот код для получения title и описания elements:

doc_xml.elements.each("events/event") do |element|
      event = Event.new
      event.title = element.elements["title"].text
      event.description = element.elements["description"].text

Я пробовал event.address = element.elements["venue"].elements["address"], но получаю неопределенные элементы метода для nil:NilClass.

Но как я могу получить доступ к элементу name внутри элемента venue?


person Alina Danila    schedule 09.10.2011    source источник


Ответы (1)


попробуй это

event.address = element.elements["venue"].elements["address"].text unless element.elements["venue"].elements["address"].nil?

потому что вы должны использовать текстовый метод только в том случае, если «место проведения» имеет элемент «адрес», в противном случае возвращается nil.

вы можете получить элемент "имя" таким же образом:

event.name = element.elements["venue"].elements["name"].text unless element.elements["venue"].elements["name"].nil?

если вам нужно делать более сложные вещи с XML, я рекомендую использовать синтаксический анализатор, такой как nokogiri

person ben    schedule 09.10.2011