XML——流机制解析器
生活随笔
收集整理的這篇文章主要介紹了
XML——流机制解析器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README
0.1) 本文文字描述轉自 core java volume 2 , 旨在理解 XML——流機制解析器 的基礎知識 ;
0.2) for detailed StAX, please visit http://blog.csdn.net/pacosonswjtu/article/details/50569728
【1】XML——流機制解析器概述
1)problem+solution
- 1.1)problem: 如果文檔很大,并且處理算法簡單,可以在運行時解析節點, 而不必看到完整的樹型結構, 那么DOM 解析器的執行效率就低下 了;
- 1.2)solution: 在這種case 下, 我們應該使用流機制解析器;(干貨——引入流機制解析器的原因)
2)java 提供的流機制解析器: SAX解析器和添加到Java 6 中的更現代化的 StAX 解析器。 SAX解析器使用的是事件回調, 而StAX解析器提供了解析事件的迭代器;(干貨——java提供了SAX流機制解析器+StAX 解析器)
【2】使用SAX解析器 (干貨——DOM解析器是基于SAX解析器的)
1)SAX解析器在解析XML 輸入的組成部分時會報告事件, 但不會以任何方式存儲文檔,而是由事件處理器建立相應的數據結構; (干貨——SAX解析器在解析XML 輸入的組成部分時會報告事件,即SAX解析器是基于事件的)
2)在使用SAX 解析器時,需要一個處理器來為不同的解析器事件定義事件動作,ContentHandler接口定義了若干個在解析文檔時解析器會調用的回調方法。 下面是最重要的幾個:
- 2.1)startElement 和 endElement: 在每當遇到起始或終止標簽時調用;
- 2.2)characters :在每當遇到字符數據事件調用;
- 2.3)startDocument 和 endDocument:分別在文檔開始和結束時各調用一次;
3)看個荔枝:解析以下片段時,
<font><name>a</name><size units="pt">36</size> </font>3.1)解析器會產生以下調用:
- step1)startElement, 元素名: font
- step2)startElement, 元素名: name
- step3)characters, 內容: a
- step4)endElement, 元素名: name
- step5)startElement, 元素名:size,屬性:units=“pt”
- step6)characters, 內容: 36
- step7)endElement, 元素名: size
- step8)endElement, 元素名: font
3.2)處理器必須覆蓋以上方法, 讓它們執行在解析文件時想要執行的動作;
Attention)
- A1) HTML不是合法的XML, 大多數 HTML 頁面都與良構的XML差別很大, 以至于示例程序無法解析它們;
- A2)但是,W3C 編寫的大部分頁面都是用 XHTML編寫的, XHTML 是一種 HTML方言,又是良構的XML; (干貨——HTML不是合法的XML,而 XHTML 是一種 HTML方言,又是良構的XML)
4)代碼分析:
- 4.1)下面是如何得到SAX 解析器的代碼: (干貨——如何創建SAX解析器)
- 4.2)現在可以處理文檔了:
- 4.3)這里的source 可以是一個文件, 一個URL 字符串或者是一個輸入流。Handler 屬于 DefaultHandler 的一個子類, DefaultHandler 類為以下四個接口定義了空的方法:
- 4.4)startElement 方法有3個描述元素名的參數: 其中 qname 參數以 prefix:localname的形式報告限定名; 如果命名空間處理特性已經打開, 那么 namespaceURI 和 lname 參數描述的就是 命名空間和 本地名(非限定)。
- 4.5)與DOM解析器一樣, 命名空間處理特性默認是關閉 的, 可以調用工廠類的 setNamespaceAware 方法來激活命名空間處理特性:
- 4.6)我們還處理了另外一個常見的問題: (干貨——如果你不需要驗證文件, 只需調用factory.setFeature方法)
- XHTML 文件總是以一個包含對 DTD 引用的標簽開頭, 解析器將加載這個 DTD。 可以理解的是, W3C 肯定不樂意對諸如www.w3.org/TR/xhtml/DTD/xhtml-strict.dtd 這樣的文件提供千萬億次的下載??傆幸惶?#xff0c;他們會完全拒絕提供這些文件, 至今,它們還在并不情愿地提供DTD下載。如果你不需要驗證文件, 只需調用: factory.setFeature(“http://apache.org/xml/features/nonvalidating/load-external-dtd“, false);
總結
以上是生活随笔為你收集整理的XML——流机制解析器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北京住宿攻略 盘点北京住宿攻略
- 下一篇: asp.net ajax控件工具集 Au