Ruby 编程/XML 处理/REXML
REXML 是一个 XML 处理 API。从 Ruby 1.8 开始,它被包含在标准 API 中。
REXML 可以读取和写入 XML 文档。针对 DTD 或模式的验证尚未完全实现。
还存在强大的 XML 解析 gem,例如 nokogiri 和 hpricot gem。它们通常比 REXML 运行得更快。
使用 DOM API,REXML 可以解析文档并构建一个包含元素、属性和文本的树。
例如,这可能用于保存华夏公益教科书
<wikibook title="Programming:Ruby">
<section title="Getting started">
<chapter title="Overview">Ruby is a programming language of the Perl and Python ilk; [...]
</chapter>
</section>
</wikibook>
在这种情况下,chapter 是一个元素。它有一个属性title,其值为Overview,还有一个文本,其值为“Ruby 是一种编程语言 [...]”。
section 也是一个元素。它也有一个属性,但没有文本。相反,它有一个元素,chapter 元素。
简而言之,元素可以有属性、文本和子元素。
解析 XML 文档时,会创建一个 REXML::Document 类的实例。(REXML::Document 的 new 消息只需要用 REXML::Document 本身、String 或 IO 来馈送。)这代表整个文档,包括<?xml...?> 标签。REXML::Document 本身是REXML::Element 的子类,这是一个重要的类。
使用 DOM 时,Element 类的实例表示 XML 文档的元素。它们可能具有属性(使用 attributes 消息访问)、文本和子元素。
Document 本身就是一个 Element,但通常情况下,你可能更感兴趣的是 XML 文档的根元素。正如 XML 规范中定义的那样,任何文档都只有一个根元素;它可以很容易地通过调用 REXML::Document.root() 获取。
一旦获得了根 Element,就可以使用 Element 中定义的 elements 消息(它返回所有子元素的集合)向下遍历树,或者访问属性或文本,无论你需要的什么。
树也可以被修改。此外,to_s 方法已被重写,以返回元素、属性和文本的 XML 代码。Element.to_s 返回整个元素的 XML 代码,包括属性、文本和子元素的 XML 代码。你也可以在 Document 上调用它。