代码示例:
使用REXML库解析XML格式数据的方法
- 引入REXML库
首先,需要引入REXML库。由于REXML是Ruby的标准库,无需额外安装,直接在代码中引入即可。
ruby复制
require ‘rexml/document’
include REXML - 解析XML文档
2.1 从文件中解析XML
假设有一个名为books.xml的XML文件,内容如下:
xml复制
doc = Document.new(xml_string)
3. 访问XML元素和属性
3.1 访问根元素
ruby复制
root = doc.root
puts root.attributes[“shelf”] # 输出: Recent Acquisitions
3.2 遍历所有
ruby复制
doc.elements.each(“library/section”) { |e| puts e.attributes[“name”] }
输出:
Ruby
Space
3.3 遍历所有元素的isbn属性
ruby复制
doc.elements.each(“*/section/book”) { |e| puts e.attributes[“isbn”] }
输出:
0672328844
0684835509
074325631X
3.4 访问特定元素的元素的文本
ruby复制
sec2 = root.elements[2]
author = sec2.elements[1].elements[“author”].text # 输出: Robert Zubrin
puts author
4. 使用XPath查询
REXML支持XPath查询,可以更方便地访问特定元素。
ruby复制
获取第一个元素
invisibility = XPath.first(doc, “//book”)
puts invisibility.attributes[“isbn”] # 输出: 0672328844
打印所有元素的文本
XPath.each(doc, “//description”) { |element| puts element.text }
获取所有元素
titles = XPath.match(doc, “//title”)
titles.each { |title| puts title.text }
5. 流式解析(SAX-like Parsing)
如果需要处理大型XML文件,可以使用流式解析。以下是一个示例:
ruby复制
require ‘rexml/document’
require ‘rexml/streamlistener’
include REXML
class MyListener
include REXML::StreamListener
def tag_start(name, attrs)
puts “Start tag: #{name} with attributes: #{attrs}”
end
def text(data)
return if data.strip.empty?
puts “Text: #{data.strip}”
end
def tag_end(name)
puts “End tag: #{name}”
end
end
listener = MyListener.new
file = File.new(“books.xml”)
Document.parse_stream(file, listener)
总结
通过上述方法,可以使用REXML库在Ruby中解析XML格式的数据。无论是从文件还是字符串中解析,REXML都提供了简单而强大的API来处理XML文档。
喜欢本文,请点赞、收藏和关注!
如能打赏、那更好了!
**如有朋友需要杭州社保挂靠的,可以在评论区或联系博主!
本人有朋友公司需要有计算机专业人员的社保缴纳。因为是新公司
**