0

0

Ruby怎么解析XML REXML库使用教程

月夜之吻

月夜之吻

发布时间:2025-12-31 08:37:03

|

968人浏览过

|

来源于php中文网

原创

rexml 是 ruby 标准库内置的轻量 xml 解析方案,支持字符串/文件解析、xpath 查询、树遍历、动态生成与格式化输出,适用于中小型任务,需注意命名空间、空白处理、大文件及编码问题。

ruby怎么解析xml rexml库使用教程

Ruby 解析 XML 最常用、标准库自带的方案就是 REXML。它轻量、无需额外安装,适合中小型 XML 处理任务(如读取配置、解析 API 响应、生成简单 XML 报文等)。下面用清晰、实用的方式讲清楚怎么用。

加载和基础解析:从字符串或文件开始

REXML 默认已包含在 Ruby 标准库中,直接 require 即可。解析入口通常是 REXML::Document

  • 字符串解析
    require 'rexml/document'<br>doc = REXML::Document.new("<root><item id='1'>Hello</item></root>")
  • 从文件解析:
    doc = REXML::Document.new(File.read("data.xml"))(注意编码,如有中文建议加 File.read("data.xml", encoding: "UTF-8")

提取元素内容:用 XPath 或遍历方式

获取节点最直观的是 XPath —— 简洁且表达力强:

MusicAI
MusicAI

AI音乐生成工具

下载
  • 找所有 <item></item> 的文本:
    doc.elements.each("//item") { |e| puts e.text }
  • 按属性筛选(比如 id=1):
    doc.elements.each("//item[@id='1']") { |e| puts e.text }
  • 获取某个节点的属性值:
    e.attributes["id"]e 是一个 REXML::Element

也可用树形遍历(适合逻辑较复杂、需逐层判断的场景):

doc.root.each_element do |child|<br>  puts "#{child.name}: #{child.text}"<br>end

修改和生成 XML:构建新文档或更新现有结构

REXML 支持动态创建和修改:

  • 新建文档并添加元素:
    doc = REXML::Document.new<br>root = doc.add_element("response")<br>root.add_element("status").text = "success"<br>root.add_element("count").text = "42"
  • 向已有元素追加子节点:
    item = doc.root.add_element("item")<br>item.add_attribute("type", "urgent")<br>item.text = "Fix bug now"
  • 输出格式化 XML(带缩进):
    require 'rexml/formatters'<br>formatter = REXML::Formatters::Pretty.new(2)<br>formatter.write(doc, $stdout)

常见坑与注意事项

实际用时容易踩几个小坑:

  • 默认不处理命名空间(namespace),若 XML 含 xmlns,需显式声明并使用前缀,例如:
    doc = REXML::Document.new(xml)<br>doc.namespaces["ns"] = "http://example.com/ns"<br>doc.elements["//ns:item"]
  • 文本节点可能含空白换行(尤其格式化 XML),用 e.text.strip 更安全
  • 大文件慎用 DOM 方式(全部载入内存),可改用 REXML::Parsers::BaseParser 或考虑 Nokogiri(更高效,但需 gem install)
  • 中文乱码?确保源 XML 声明编码一致(如 <?xml version="1.0" encoding="UTF-8"?>),Ruby 读取时也指定 encoding

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

509

2023.11.27

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1944

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2118

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1160

2024.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

738

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1561

2023.10.24

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Rust 教程
Rust 教程

共28课时 | 6.6万人学习

Git 教程
Git 教程

共21课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号