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 # 输出: ## Alice #30 #Beijing #
处理特殊字符与CDATA
Builder默认对、&等字符自动转义,确保XML合法。如需原样插入(如含HTML片段),用cdata!:
xml.note do xml.content "5 < 10" # →5 zuojiankuohaophpcn 10 xml.description { xml.cdata! "Hello & world
" } 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声明,手动前置:
"\n" + xml.target!









