- Java核心技術·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 774字
- 2020-10-30 18:10:51
3.6.2 使用StAX解析器
StAX解析器是一種“拉解析器(pull parser)”,與安裝事件處理器不同,你只需使用下面這樣的基本循環來迭代所有的事件:

例如,在解析下面的片斷時

解析器將產生下面的事件:
1)START_ELEMENT,元素名:font
2)CHARACTERS,內容:空白字符
3)START_ELEMENT,元素名:name
4)CHARACTERS,內容:Helvetica
5)END_ELEMENT,元素名:name
6)CHARACTERS,內容:空白字符
7)START_ELEMENT,元素名:size
8)CHARACTERS,內容:36
9)END_ELEMENT,元素名:size
10)CHARACTERS,內容:空白字符
11)END_ELEMENT,元素名:font
要分析這些屬性值,需要調用XMLStreamReader類中恰當的方法,例如:

它可以獲取當前元素的units屬性。
默認情況下,命名空間處理是啟用的,你可以通過像下面這樣修改工廠來使其無效:

程序清單3-9包含了用StAX解析器實現的網絡爬蟲程序。正如你所見,這段代碼比等效的SAX代碼要簡短了許多,因為此時我們不必操心事件處理問題。
程序清單3-9 stax/StAXTest.java


javax.xml.stream.XMLInputFactory 6
·static XMLInputFactory newInstance()
返回XMLInputFactory類的一個實例。
·void setProperty(String name,Object value)
設置這個工廠的屬性,或者在要設置的屬性不支持設置成給定值時,拋出IllegalArgument Exception。Java SE的實現支持下列Boolean類型的屬性:


·XMLStreamReader createXMLStreamReader(InputStream in)
·XMLStreamReader createXMLStreamReader(InputStream in,String characterEncoding)
·XMLStreamReader createXMLStreamReader(Reader in)
·XMLStreamReader createXMLStreamReader(Source in)
創建一個從給定的流、閱讀器或JAXP源讀入的解析器。
javax.xml.stream.XMLStreamReader 6
·boolean hasNext()
如果有另一個解析事件,則返回true。
·int next()
將解析器的狀態設置為下一個解析事件,并返回下列常量之一:START_ELEMENT、END_ELEMENT、CHARACTERS、START_DOCUMENT、END_DOCUMENT、CDATA、COMMENT、SPACE(可忽略的空白字符)、PROCESSING_INSTRUCTION、ENTITY_REFERENCE、DTD。
·boolean isStartElement()
·boolean isEndElement()
·boolean isCharacters()
·boolean isWhiteSpace()
如果當前事件是一個開始元素、結束元素、字符數據或空白字符,則返回true。
·QName getName()
·String getLocalName()
獲取在START_ELEMENT或END_ELEMENT事件中的元素的名字。
·String getText()
返回一個CHARACTERS、COMMENT或CDATA事件中的字符,或一個ENTITY_REFERENCE的替換值,或者一個DTD的內部子集。
·int getAttributeCount()
·QName getAttributeName(int index)
·String getAttributeLocalName(int index)
·String getAttributeValue(int index)
如果當前事件是START_ELEMENT,則獲取屬性數量和屬性的名字與值。
·String getAttributeValue(String namespaceURI,String name)
如果當前事件是START_ELEMENT,則獲取具有給定名稱的屬性的值。如果namespaceURI為null,則不檢查名字空間。
- 微服務設計(第2版)
- Mastering Adobe Captivate 2017(Fourth Edition)
- 編程的修煉
- 零基礎學C++程序設計
- C語言程序設計實踐教程
- JS全書:JavaScript Web前端開發指南
- MySQL數據庫管理與開發實踐教程 (清華電腦學堂)
- 利用Python進行數據分析(原書第3版)
- Mastering Business Intelligence with MicroStrategy
- 劍指大數據:企業級數據倉庫項目實戰(在線教育版)
- Oracle實用教程
- Python計算機視覺和自然語言處理
- Redmine Cookbook
- Python Automation Cookbook
- Learning Rust