DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 使用特定於語言的工具來進行 XML 處理
使用特定於語言的工具來進行 XML 處理
編輯:XML詳解     

SAX 和 DOM 是兩個主要的 XML 處理 API。開發人員通常知道最好的選擇是 SAX(從解析器到分離處理程序的推式事件) 和 DOM(將文檔解析成易於訪問的對象樹)的標准模型。SAX 通常為大文檔提供了好的性能,而 DOM 通常提供了更直接的代碼。SAX 設計用於 Java 語言,但是到其他語言的綁定已經開發出來了。然而,在這些其他語言中,SAX 的 Java 特征通常展示出來了,而所使用的語言的優勢則不再存在。DOM 設計為盡可能作為一種語言無關的方式,這一點在 ISO Interface Definition Language (IDL)中指定了。標准綁定是為 Java 語言和 ECMAScript (JavaScript) 而存在的,但這些依然會影響 IDL 的語言無關的結構,所有語言綁定,不管是官方的還是非官方的,也都取消了宿主語言的某些優勢。

  要更好地利用核心語言的優勢,一些開發人員已經開發了本地針對特定語言的 XML 處理 API。幾乎所有的知名語言都有一個或者多個工具包提供這種 API。有些時間,常規方法一直堅持最好使用 SAX 和 DOM 以便最大限度地提高可移植性,但是經驗告訴我,這通常只是一個言過其實的考慮。對於某件事情,由於 SAX 和 DOM 的語言綁定有一些偏差,代碼很少真正地進行跨語言移植,從一種語言到另一種語言移植時,進行代碼改編的工作仍然相當重要。在同一種語言的多個實現之間,使用 SAX 和 DOM 通常確實提高了可移植性,但這必須在事實中進行權衡,因為不采用某些語言的優勢經常會降低程序員的效率。

  拉式 API

  開發人員采用幾種語言獨立地進行早期探索的一個領域是 拉式 DOM(pull DOM),這是一個包裝了 SAX 的系統,所以系統能夠從解析器拉事件而不是將事件推出去。這種調整通常允許更直接的代碼,並且實現起來通常使用本機語言結構,這樣獲得比純 SAX 或者 DOM 更大的應用范圍。 Java Specification Requests (JSR #173) for Streaming API for XML (StAX) 是一個拉式解析 XML 的 Java API。其他拉式 API 包括用於 C、 C++、 Python、Perl 和其他語言的 libxml2's xmlTextReader,它有 libxml2 包裝器。Python 帶有一個 XML.dm.pulldom 模塊,它提供了一個拉式 API。

  編組程序和 XML 數據結構

  除了 SAX 和 DOM 之外,另一個早期慣用法是開發把 XML 轉換成本機語言常用數據結構的工具 —— 一個叫做 編組(unmarshalling)的過程 —— 與之相對的是 解組)。這個想法是為了使開發人員采用自己喜歡的特定語言,而不必真正考慮數據背後的 XML 。不幸的是,許多開發人員不喜歡 XML,而這通常又是他們能夠發現 XML 好處的唯一方式。但即使對於那些喜歡 XML 的開發人員,編組工具對於快速簡潔地處理也是有用的: JDOM 是類似於 DOM 的 API,它嚴格局限於 Java 語言習慣;Python 用戶有 ElementTree,它從 XML 創建專用的數據結構,重點是元素;Perl 用戶現在更喜歡老式的 XML::Grove,它用一棵 Perl 散列樹來交換已解析的 XML、Html 或者 SGML;Ruby 用戶有 XMLification,用於 Ruby 對象到 XML 的非常簡單的轉換;PHP 可以選擇 class_path_parser.php,它允許您為 XML 源注冊類似於 XPath 的表達式,並據此調度 PHP 處理器函數;Haskell 的選擇是 Haskell2Xml,它允許您讀取和編寫普通的 Haskell 數據作為 XML 文檔。

  XML 數據綁定

  編組方法作為一種最流行的選擇正顯露出來,它使用 XML 模式語言和其他源代碼用本機語言創建數據結構,這種結構使用了用 XML 文檔表達的詞匯表。這種系統稱為 XML 數據綁定,在很多情況下,它們導致最自然合理的 XML 操縱。Java 技術用戶可以看看 JSR #31, "XML Data Binding Specification"。 Castor、 JBind 和 JiBX 工具與 JAXB 有相似的特性。Python 用戶有 Anobind、 gnosis.xml.objectify 和 xmltramp,它們從直接檢查源 XML 代碼開始操作,然後是 generateDS.py,它使用 W3C XML Schema 來驅動綁定。Perl 的一個選項是 XML::Smart。

  結束語

  所以不管您喜歡哪種語言,都有很多種處理 XML 的選擇。不要害怕拋棄常規方法而尋找兩種主流方法以外的其他選擇。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved