搜尋
首頁後端開發XML/RSS教程詳解XML的四種解析器原理及效能比較

1: DOM

  DOM 是用與平台和語言無關的方式表示 XML 文件的官方 W3C 標準。 DOM 是以層次結構組織的節點或資訊片段的集合。這個層次結構允許開發人員在樹中尋找特定資訊。分析該結構通常需要載入整個文件和建構層次結構,然後才能做任何工作。由於它是基於資訊層次的,因而 DOM 被認為是基於樹或基於物件的。 DOM 以及廣義的基於樹的處理具有幾個優點。
  首先,由於樹在記憶體中是持久的,因此可以修改它以便應用程式能對資料和結構作出更改。它還可以在任何時候在樹中上下導航,而不是像 SAX 那樣是一次性的處理。 DOM 使用起來也要簡單得多。
  另一方面,對於特別大的文檔,解析和加載整個文檔可能很慢且很耗資源,因此使用其他手段來處理這樣的資料會更好。這些基於事件的模型,例如 SAX。

2:SAX

  這種處理的優點非常類似串流媒體的優點。分析能夠立即開始,而不是等待所有的資料被處理。而且,由於應用程式只是在讀取數據時檢查數據,因此不需要將數據儲存在記憶體中。這對於大型文件來說是個巨大的優點。事實上,應用程式甚至不必解析整個文件;它可以在某個條件滿足時停止解析。一般來說,SAX 還比它的替代者 DOM 快許多。
  3:選擇 DOM 還是選擇 SAX ?
  對於需要自己編寫程式碼來處理 XML 文件的開發人員來說,選擇 DOM 還是 SAX 解析模型是一個非常重要的設計決策。 
  DOM 採用建立樹狀結構的方式存取 XML 文檔,而 SAX 採用的事件模型。 
  DOM 解析器將 XML 文件轉換成一個包含其內容的樹,並且可以對樹進行遍歷。用 DOM 解析模型的優點是程式設計容易,開發人員只需要呼叫建樹的指令,然後利用navigation APIs來存取所需的樹節點來完成任務。可以很容易的添加和修改樹中的元素。然而由於使用 DOM 解析器的時候需要處理整個 XML 文檔,所以對效能和記憶體的要求比較高,尤其是遇到很大的 XML 文件的時候。由於它的遍歷能力,DOM 解析器常用於 XML 文件需要頻繁的改變的服務。
  SAX 解析器採用了基於事件的模型,它在解析XML 文件的時候可以觸發一系列的事件,當發現給定的tag的時候,它可以激活一個回調方法,告訴該方法制定的標籤已經找到。 SAX 對記憶體的要求通常會比較低,因為它讓開發人員自己來決定所要處理的tag。特別是當開發人員只需要處理文件中所包含的部分資料時,SAX 這種擴充能力就得到了更好的體現。但用 SAX 解析器的時候編碼工作會比較困難,而且很難同時存取同一個文件中的多個不同資料。

4:JDOM

  JDOM的目的是成為 Java 特定文件模型,它簡化與 XML 的交互並且比使用 DOM 實現更快。由於是第一個 Java 特定模型,JDOM 一直被大力推廣和促進。正在考慮透過「Java 規格請求 JSR-102」將它最終用作「Java 標準擴充」。從 2000 年初就已經開始了 JDOM 開發。
  JDOM 與 DOM 主要有兩方面不同。首先,JDOM 僅使用特定類別而不使用介面。這在某些方面簡化了 API,但也限制了靈活性。第二,API 大量使用了 Collections 類,簡化了那些已經熟悉這些類別的 Java 開發者的使用。
  JDOM 文件聲明其目的是「使用 20%(或更少)的精力解決 80%(或更多)Java/XML 問題」(根據學習曲線假定為 20%)。 JDOM 對於大多數 Java/XML 應用程式來說當然是有用的,而且大多數開發者發現 API 比 DOM 容易理解得多。 JDOM 還包括對程式行為的相當廣泛檢查以防止使用者做任何在 XML 中無意義的事。然而,它仍然需要您充分理解 XML 以便做一些超出基本的工作(或甚至理解某些情況下的錯誤)。這也許是比學習 DOM 或 JDOM 介面更有意義的工作。
  JDOM 本身不包含解析器。它通常使用 SAX2 解析器來解析和驗證輸入 XML 文件(儘管它還可以將先前構造的 DOM 表示作為輸入)。它包含一些轉換器以將 JDOM 表示輸出成 SAX2 事件流、DOM 模型或 XML 文字文件。 JDOM 是在 Apache 許可證變體下發布的開放原始碼。

5: DOM4J

#

  雖然 DOM4J 代表了完全獨立的開發結果,但最初,它是 JDOM 的一種智慧分支。它合併了許多超出基本 XML 文件表示的功能,包括整合的 XPath 支援、XML Schema 支援以及用於大型文件或串流文件的基於事件的處理。它還提供了建置文件表示的選項,它透過 DOM4J API 和標準 DOM 介面具有並行存取功能。從 2000 下半年開始,它就一直處於開發之中。
  為支援所有這些功能,DOM4J 使用介面和抽象基本類別方法。 DOM4J 大量使用了 API 中的 Collections 類,但是在許多情況下,它還提供一些替代方法以允許更好的效能或更直接的編碼方法。直接好處是,雖然 DOM4J 付出了更複雜的 API 的代價,但它提供了比 JDOM 大得多的靈活性。
  在新增彈性、XPath 整合和對大文件處理的目標時,DOM4J 的目標與 JDOM 是一樣的:針對 Java 開發者的易用性和直覺操作。它也致力於成為比 JDOM 更完整的解決方案,實現本質上處理所有 Java/XML 問題的目標。在完成該目標時,它比 JDOM 更少強調防止不正確的應用程式行為。
  DOM4J 是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體。如今你可以看到越來越多的 Java 軟體都在使用 DOM4J 來讀寫 XML,特別值得一提的是連 Sun 的 JAXM 也在用 DOM4J。
  6:總述
  JDOM 和 DOM 在效能測試時表現不佳,在測試 10M 文件時記憶體溢出。在小文檔情況下也值得考慮使用 DOM 和 JDOM。雖然 JDOM 的開發者已經說明他們期望在正式發行版前專注於效能問題,但從效能觀點來看,它確實沒有值得推薦之處。另外,DOM 仍是一個非常好的選擇。 DOM 實作廣泛應用於多種程式語言。它也是許多其它與XML 相關的標準的基礎,因為它正式獲得W3C 推薦(與基於非標準的Java 模型相對),所以在某些類型的專案中可能也需要它(如在javascript 中使用DOM)。
  SAX表現較好,這要依賴它特定的解析方式。一個 SAX 偵測即將到來的XML流,但並沒有載入到記憶體(當然當XML流被讀入時,會有部分文件暫時隱藏在記憶體中)。
  無疑,DOM4J是最好的,目前許多開源專案中大量採用 DOM4J,例如大名鼎鼎的 Hibernate 也用 DOM4J 來讀取 XML 設定檔。如果不考慮可移植性,那就採用DOM4J吧!

以上是詳解XML的四種解析器原理及效能比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何用PHP和XML实现网站的分页和导航如何用PHP和XML实现网站的分页和导航Jul 28, 2023 pm 12:31 PM

如何用PHP和XML实现网站的分页和导航导言:在开发一个网站时,分页和导航功能是很常见的需求。本文将介绍如何使用PHP和XML来实现网站的分页和导航功能。我们会先讨论分页的实现,然后再介绍导航的实现。一、分页的实现准备工作在开始实现分页之前,需要准备一个XML文件,用来存储网站的内容。XML文件的结构如下:<articles><art

XML外部实体注入漏洞的示例分析XML外部实体注入漏洞的示例分析May 11, 2023 pm 04:55 PM

一、XML外部实体注入XML外部实体注入漏洞也就是我们常说的XXE漏洞。XML作为一种使用较为广泛的数据传输格式,很多应用程序都包含有处理xml数据的代码,默认情况下,许多过时的或配置不当的XML处理器都会对外部实体进行引用。如果攻击者可以上传XML文档或者在XML文档中添加恶意内容,通过易受攻击的代码、依赖项或集成,就能够攻击包含缺陷的XML处理器。XXE漏洞的出现和开发语言无关,只要是应用程序中对xml数据做了解析,而这些数据又受用户控制,那么应用程序都可能受到XXE攻击。本篇文章以java

php如何将xml转为json格式?3种方法分享php如何将xml转为json格式?3种方法分享Mar 22, 2023 am 10:38 AM

当我们处理数据时经常会遇到将XML格式转换为JSON格式的需求。PHP有许多内置函数可以帮助我们执行这个操作。在本文中,我们将讨论将XML格式转换为JSON格式的不同方法。

Python中xmltodict对xml的操作方式是什么Python中xmltodict对xml的操作方式是什么May 04, 2023 pm 06:04 PM

Pythonxmltodict对xml的操作xmltodict是另一个简易的库,它致力于将XML变得像JSON.下面是一个简单的示例XML文件:elementsmoreelementselementaswell这是第三方包,在处理前先用pip来安装pipinstallxmltodict可以像下面这样访问里面的元素,属性及值:importxmltodictwithopen("test.xml")asfd:#将XML文件装载到dict里面doc=xmltodict.parse(f

使用nmap-converter将nmap扫描结果XML转化为XLS实战的示例分析使用nmap-converter将nmap扫描结果XML转化为XLS实战的示例分析May 17, 2023 pm 01:04 PM

使用nmap-converter将nmap扫描结果XML转化为XLS实战1、前言作为网络安全从业人员,有时候需要使用端口扫描利器nmap进行大批量端口扫描,但Nmap的输出结果为.nmap、.xml和.gnmap三种格式,还有夹杂很多不需要的信息,处理起来十分不方便,而将输出结果转换为Excel表格,方面处理后期输出。因此,有技术大牛分享了将nmap报告转换为XLS的Python脚本。2、nmap-converter1)项目地址:https://github.com/mrschyte/nmap-

xml中node和element的区别是什么xml中node和element的区别是什么Apr 19, 2022 pm 06:06 PM

xml中node和element的区别是:Element是元素,是一个小范围的定义,是数据的组成部分之一,必须是包含完整信息的结点才是元素;而Node是节点,是相对于TREE数据结构而言的,一个结点不一定是一个元素,一个元素一定是一个结点。

Python中怎么对XML文件的编码进行转换Python中怎么对XML文件的编码进行转换May 21, 2023 pm 12:22 PM

1.在Python中XML文件的编码问题1.Python使用的xml.etree.ElementTree库只支持解析和生成标准的UTF-8格式的编码2.常见GBK或GB2312等中文编码的XML文件,用以在老旧系统中保证XML对中文字符的记录能力3.XML文件开头有标识头,标识头指定了程序处理XML时应该使用的编码4.要修改编码,不仅要修改文件整体的编码,还要将标识头中encoding部分的值修改2.处理PythonXML文件的思路1.读取&解码:使用二进制模式读取XML文件,将文件变为

深度使用Scrapy:如何爬取HTML、XML、JSON数据?深度使用Scrapy:如何爬取HTML、XML、JSON数据?Jun 22, 2023 pm 05:58 PM

Scrapy是一款强大的Python爬虫框架,可以帮助我们快速、灵活地获取互联网上的数据。在实际爬取过程中,我们会经常遇到HTML、XML、JSON等各种数据格式。在这篇文章中,我们将介绍如何使用Scrapy分别爬取这三种数据格式的方法。一、爬取HTML数据创建Scrapy项目首先,我们需要创建一个Scrapy项目。打开命令行,输入以下命令:scrapys

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。