Nokogiri功能全面,支持解析与生成,适合大多数项目;Builder专精xml生成,语法清晰;REXML为标准库,轻量易用;Ox性能优异,适用于高频或大文件处理。

ruby处理XML非常灵活,得益于其丰富的第三方库和简洁的语法。无论是解析已有XML文件,还是动态生成XML内容,Ruby都有多个成熟、易用的工具可供选择。下面介绍几种常用的Ruby库及其使用场景。
1. Nokogiri:功能最强大的xml处理库
Nokogiri 是 Ruby 中最流行的 XML(和 html)解析与生成库,支持 XPath 和 css 选择器,性能高,功能全面。
安装方式:
gem install nokogiri
解析 XML 示例:
假设有如下 XML 内容:
<bookstore><br> <book id="1"><br> <title>Ruby 入门</title><br> <author>张三</author><br> </book><br> </bookstore>
使用 Nokogiri 解析:
require 'nokogiri'xml = File.read('bookstore.xml')doc = Nokogiri::XML(xml)doc.xpath('//book').each do |book| puts book.at_css('title').content puts book['id']end
生成 XML 示例:
builder = Nokogiri::XML::Builder.new do bookstore { book(id: 1) { title "Ruby 入门" author "张三" } }endputs builder.to_xml
Nokogiri 既能解析也能构建,适合大多数实际项目。
2. Builder:专注于生成 XML
Builder 是一个轻量级库,专用于生成结构化的 XML 或 xhtml,语法清晰,嵌套自然。
安装方式:
gem install builder
生成 XML 示例:
require 'builder/xmlMarkup'xml = Builder::XmlMarkup.new(indent: 2)output = xml.bookstore { xml.book(id: 1) { xml.title "Ruby 入门" xml.author "张三" }}puts output
Builder 不擅长解析 XML,但生成时代码可读性很高,适合模板化输出。
3. REXML:标准库,无需安装
Ruby 自带 REXML 库,无需额外安装,适合简单脚本或轻量需求。
解析示例:
require 'rexml/document'include REXMLfile = File.new('bookstore.xml')doc = Document.new(file)doc.elements.each('bookstore/book') do |book| puts book.elements['title'].textend
生成示例:
doc = Document.newroot = doc.add_element 'bookstore'book = root.add_element 'book', {'id' => '1'}book.add_element('title').text = 'Ruby 入门'File.write('output.xml', doc.to_s)
REXML 使用简单,但性能不如 Nokogiri,不推荐用于大型或高频 XML 处理。
4. Ox:高性能 XML 解析器
Ox 是一个用 C 编写的高速 XML 解析和生库,适合对性能要求高的场景。
安装方式:
gem install ox
解析示例:
require 'ox'doc = Ox.parse(File.read('bookstore.xml'), mode: :hash)puts doc['bookstore']['book']['title']
Ox 支持对象映射和流式解析,特别适合处理大文件或 API 接口数据。
基本上就这些。Nokogiri 是多数情况下的首选,Builder 适合专注生成,REXML 适合快速脚本,Ox 用于性能敏感场景。根据项目需求选择合适工具即可。


