DOM(Document Object Model,文檔對象模型),則是在分析時,一次性的將整個XML文檔進行分析,並在內存中形成對應的樹結構,同時,向用戶提供一系列的接口來訪問和編輯該樹結構。這種方式佔用內存大,速度往往慢於SAX,但可以給用戶提供一個面向對象的訪問接口,對用戶更爲友好。
解析器分爲兩種:一種是驗證的,即會跟據XML文件中的聲明,用相應的DTD文件對XML文件進行校驗,檢查它是否滿足DTD文件的要求。另一種是忽略DTD文件,只要基本格式正確,就可以進行解析。
一般而言,驗證的解析器通常都是比較重量級的。TinyXml不支持驗證,但是體積很小,用在解析格式較爲簡單的XML文件,比如配置文件、簡單的數據文件,特別的合適,可以很方便的靜態連接到程序裏。但是由於它是非驗證的,因此需要在程序裏做許多檢查工做,加重了程序編寫的負擔。
下面介紹TinyXML的一些類。在TinyXML中,根據XML的各種元素來定義了一些類:
TiXmlBase:整個TinyXML模型的基類。
TiXmlAttribute:對應於XML中的元素的屬性。
TiXmlNode:對應於DOM結構中的節點。
TiXmlComment:對應於XML中的註釋
TiXmlDeclaration:對應於XML中的申明部分,<?versiong="1.0" ?>。
TiXmlDocument:對應於XML的整個文檔。
TiXmlElement:對應於XML的元素。
TiXmlText:對應於XML的文字部分
TiXmlUnknown:對應於XML的未知部分。
TiXmlHandler:定義了針對XML的一些操作。
TinyXML2實現了一個名爲MemPoolT的模板類,創建對象時,均是由XMLDocument持有的MemPoolT對象來進行內存分配,在MemPoolT中,分配的內存以鏈表形式連接起來,統一管理,統一釋放。因此,即便是所創建的節點未被鏈接到文檔樹中,也不會造成內存泄漏,所以,無需顯式的執行delete操作。