Ruby XML (REXML)

17 Mar 2025 | 4 分钟阅读

XML 是一种可扩展标记语言,类似于 HTML。 它允许程序员开发可以被其他应用程序读取的应用程序,而不管使用什么操作系统和开发语言。

它跟踪少量到中等数量的数据,而无需任何基于 SQL 的技术作为后端。

REXML 是一个纯粹的 Ruby XML 处理器。它表示一个完整的 XML 文档,包括 PI、doctype 等。 XML 文档只有一个子节点,可以通过 root() 访问。 如果您想为创建的文档添加 XML 声明,则必须添加一个。 REXML 文档不会为您编写默认声明。

REXML 受到 Java 的 Electric XML 库的启发。 它的 API 易于使用,体积小巧,并且遵循 Ruby 的方法来命名方法和代码流程。

它支持树和流文档解析。 流解析比树解析快 1.5 倍。 但是,在流解析中,您无法访问 XPath 等某些功能。


REXML 特点

  • 它完全用 Ruby 编写。
  • 它包含的代码少于 2000 行,因此重量较轻。
  • 它的方法和类很容易理解。
  • 它随 Ruby 安装一起提供。 无需单独安装它。
  • 它用于 DOM 和 SAX 解析。

解析 XML 和访问元素

让我们从解析 XML 文档开始

在上面的代码中,第 3 行解析提供的文件。

示例

在上面的代码中,require 语句加载 REXML 库。 然后包含 REXML 表明我们不必使用 REXML::Document 这样的名称。 我们已经创建了 trial.xml 文件。 文档显示在屏幕上。

输出

Ruby XML 1

Document.new 方法将其 IO、String 对象或 Document 作为其参数。 此参数指定必须从中读取 XML 文档的源。

如果 Document 构造函数将 Document 作为参数,则其所有元素节点都将克隆到新的 Document 对象。 如果构造函数接受 String 参数,则预计字符串将包含一个 XML 文档。


使用“Here Document”的 XML

Here Document 是一种指定文本块的方式,保留换行符、空格或文本缩进。

Here Document 是使用命令后跟“<<”后跟一个令牌字符串来构建的。

在 Ruby 中, “<<”和令牌字符串之间不应有空格。

示例

在这里,我们使用 Here Document 信息。 包括换行符在内的 <<EOF 和 EOF 之间的所有字符都是 info 的一部分。

对于 XML 解析示例,我们将使用以下 XML 文件代码作为输入

文件 trial.xml


Ruby XML DOM 风格的解析

我们将以树的形式解析我们的 XML 数据。 上面的文件 trial.xml 代码被用作输入。

输出

Ruby XML 2

Ruby XML SAX 风格的解析

我们将以流的形式解析我们的 XML 数据。 上面的文件 trial.xml 代码被用作输入。 在这里,我们将定义一个侦听器类,其方法将针对来自解析器的回调。

建议不要将 SAX 风格的解析用于小文件。

输出

Ruby XML 3