ruby rexml get element child

时间:2011-10-09 15:09:42

标签: ruby xml rexml

我需要使用rexml解析ruby中的xml文档,该文档具有以下结构:

<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的未定义方法`elements':NilClass。

但是如何访问name元素中的venue元素?

1 个答案:

答案 0 :(得分:3)

试试这个

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

因为如果“venue”有一个元素“address”,你应该只使用text方法,否则返回nil。

你可以用同样的方式得到“name”元素:

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

如果您必须使用XML执行更复杂的操作,我建议使用nokogiri

之类的解析器