如何用Ruby的Builder库生成XML

1次阅读

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

如何用Ruby的Builder库生成XML

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!

text=ZqhQzanResources