Ruby使用REXML库来解析xml格式数据的方法例子解析

在这里插入图片描述

代码示例:

使用REXML库解析XML格式数据的方法

  1. 引入REXML库
    首先,需要引入REXML库。由于REXML是Ruby的标准库,无需额外安装,直接在代码中引入即可。
    ruby复制
    require ‘rexml/document’
    include REXML
  2. 解析XML文档
    2.1 从文件中解析XML
    假设有一个名为books.xml的XML文件,内容如下:
    xml复制
The Ruby Way Hal Fulton Second edition. The book you are now reading. Ain't recursion grand?
The Case for Mars Robert Zubrin Pushing toward a second home for the human race. First Man: The Life of Neil A. Armstrong James R. Hansen Definitive biography of the first man on the moon.
可以使用以下代码从文件中解析XML: ruby复制 file = File.new("books.xml") doc = Document.new(file) 2.2 从字符串中解析XML 如果XML内容是一个字符串,可以使用以下代码解析: ruby复制 xml_string = <<-XML
The Ruby Way Hal Fulton Second edition. The book you are now reading. Ain't recursion grand?
The Case for Mars Robert Zubrin Pushing toward a second home for the human race. First Man: The Life of Neil A. Armstrong James R. Hansen Definitive biography of the first man on the moon.
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文档。
喜欢本文,请点赞、收藏和关注!
如能打赏、那更好了!

**如有朋友需要杭州社保挂靠的,可以在评论区或联系博主!
本人有朋友公司需要有计算机专业人员的社保缴纳。因为是新公司
**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔丹搞IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值