【问题标题】:ruby rexml get element childruby rexml 获取元素子元素
【发布时间】:2011-10-09 15:09:42
【问题描述】:

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

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

【问题讨论】:

    标签: ruby xml rexml


    【解决方案1】:

    试试这个

    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 这样的解析器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 2013-06-13
      • 2020-10-30
      相关资源
      最近更新 更多