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
上调用它。