Ruby on Rails 2.1 - XML - RXML

Rails 提供两个类来创建 XML 标记和数据结构。

  • Builder::XmlMarkup − 这将生成 XML 标记符号。

  • Builder::XmlEvents − 这将生成 XML 事件(即类似 SAX)。(即类似 SAX)

Builder::XmlMarkup

此类可用于轻松创建 XML 标记。发送到 XmlMarkup 对象的所有方法都将被转换为等效的 XML 标记。任何带有块的方法都将被视为块中带有嵌套标记的 XML 标记标签。

假设 xm 是 XmlMarkup 对象,我们从 Rails 标准文档站点中选取了一个示例。此处注释的部分已从相应的 Rails 语句生成。

示例

xm.em("emphasized")             
# => <em>emphasized</em>
xm.em { xmm.b("emp & bold") }   
# => <em><b>emph &amp; bold</b></em>
xm.a("A Link", "href"=>"http://onestepback.org")
# => <a href="http://onestepback.org">A Link</a>
xm.div { br }                    
# => <div><br/></div>
xm.target("name"=>"compile", "option"=>"fast")
# => <target option="fast" name="compile"\>
# NOTE: order of attributes is not specified.
xm.instruct!                   
# <?xml version="1.0" encoding="UTF-8"?>
xm.html {                      # <html>
   xm.head {                    #   <head>
      xm.title("History")        
      #  <title>History</title>
   }                            #   </head>
   xm.body {                    #   <body>
      xm.comment! "HI"           #   <!-- HI -->
      xm.h1("Header")            #   <h1>Header</h1>
      xm.p("paragraph")          #   <p>paragraph</p>
   }                            #   </body>
}                              #   </html>

Builder::XmlEvents

该类可用于从标记代码创建一系列类似 SAX 的 XML 事件(例如 start_tag、end_tag)。

XmlEvent 对象的使用方式与 XmlMarkup 对象类似,不同之处在于,它会生成一系列事件并将其传递给处理程序,而不是生成基于字符的标记。

示例

xe = Builder::XmlEvents.new(hander)
xe.title("HI")
# 这会将 start_tag/end_tag/text 消息发送到处理程序。

XML 事件处理程序

处理程序对象必须期待以下事件。

  • start_tag(tag, attrs) − 宣布已找到新标签。 tag 是标签的名称,attrs 是标签属性的哈希值。

  • end_tag(tag) − 宣布已找到 tag 的结束标签。

  • text(text) − 宣布已找到一串字符(文本)。一系列字符可能会被分解为多个文本调用,因此客户端不能假设单个回调包含所有文本数据。

rails-quick-guide.html