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