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 上呼叫它。