引入REXML库
首先,需要引入REXML库。由于REXML是Ruby的标准库,无需额外安装,直接在代码中引入即可。
ruby复制
require ‘rexml/document’
include REXML
解析XML文件
假设有一个名为address.xml的XML文件,内容如下:
xml复制
可以使用以下代码解析该文件:
ruby复制
file = File.new("address.xml")
doc = Document.new(file)
addrbook = doc.root
3. 使用XPath查询
REXML支持XPath查询,可以方便地获取特定元素。例如,获取所有元素:
ruby复制
persons = addrbook.elements.to_a("//person")
puts persons[1].elements["address"].attributes["city"] # 输出: Los Angeles
4. 迭代器方法
REXML元素的一个独特惯用方法是.each迭代器。例如,遍历所有加州的地址:
ruby复制
addrbook.elements.each("//address[@state='CA']") do |addr|
puts addr.attributes["city"] # 输出: Los Angeles
end
5. 流式解析(SAX-like)
对于大型文件,可以使用流式解析。定义一个监听器类,其方法将在解析时被回调:
ruby复制
require 'rexml/streamlistener'
class Handler
include StreamListener
def tag_start(name, attrs)
if name == "address" && attrs.assoc("state")[1] == "CA"
puts attrs.assoc("city")[1]
end
end
end