Ruby的Builder库通过方法调用模拟XML标签层级,自动处理转义、嵌套和缩进;支持CDATA插入、动态循环与条件节点生成,并可通过target!获取字符串或写入文件。

Ruby的Builder库是生成结构清晰、可读性强XML的常用工具,核心在于用Ruby方法调用模拟XML标签层级,自动处理转义、嵌套和缩进。
安装与基本用法
Builder通常已随Rails预装;若在纯Ruby环境使用,先安装:
gem install builder
基础示例:生成一个带属性和文本内容的简单XML
require 'builder' xml = Builder::XmlMarkup.new(indent: 2) xml.person do xml.name "Alice" xml.age "30" xml.city "Beijing", lang: "zh" end # 输出: # <person> # <name>Alice</name> # <age>30</age> # <city lang="zh">Beijing</city> # </person>
处理特殊字符与CDATA
Builder默认对、<code>&等字符自动转义,确保XML合法。如需原样插入(如含HTML片段),用cdata!:
xml.note do
xml.content "5 < 10" # → <content>5 < 10</content>
xml.description { xml.cdata! "<p>Hello & world</p>" }
end动态生成与条件嵌套
利用Ruby语法灵活拼装XML,比如遍历数组、按条件添加节点:
- 循环生成多个同级元素:
xml.items do %w[apple banana cherry].each do |fruit| xml.item(fruit) end end - 条件控制节点存在:
xml.user do xml.id user.id xml.email user.email if user.email_confirmed? xml.admin "true" if user.admin? end
输出到文件或字符串
XmlMarkup对象本身是字符串构建器,直接调用to_s获取结果:
- 写入文件:
File.write("output.xml", xml.target!) - 注意:
xml.target!返回完整字符串,xml.target是内部缓冲对象,修改后需重新调用target!获取最新内容 - 如需带XML声明,手动前置:
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml.target!


















