1

我需要使用 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:NilClass 的未定义方法“元素”。

但是我怎样才能访问name元素内的venue元素呢?

4

1 回答 1

3

尝试这个

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

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

您可以以相同的方式获取“名称”元素:

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

如果您必须使用 XML 做更复杂的事情,我建议使用像nokogiri这样的解析器

于 2011-10-09T18:13:16.747 回答