|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface XMLStreamReader
XMLStreamReader 介面允許轉發 XML 和對 XML 的只讀存取。它被設計為讀取 XML 資料的最低層且最有效的方法。
XMLStreamReader 被設計為使用 next() 和 hasNext() 在 XML 上進行迭代。可以使用諸如 getEventType()、getNamespaceURI()、getLocalName() 和 getText() 之類別的方法存取資料:
next() 方法會使 reader 讀取下一個解析事件。next() 方法返回一個整數,指示剛才讀取的事件型別。
事件型別可以使用 getEventType() 來確定。
解析事件被定義為 XML 宣告、DTD、開始標記、字元資料、空格、結束標記、註釋或處理指令。屬性或名稱空間事件可以作為查詢操作的結果在文檔的根級別出現。
為了遵守 XML 1.0,XML 處理器必須將已宣告的未解析實體的標識符、註釋宣告及其關聯標識符傳遞給應用程序。此資訊通過此介面上的屬性 API 提供。以下兩個屬性允許存取此資訊:javax.xml.stream.notations 和 javax.xml.stream.entities。當前事件為 DTD 時,以下調用將返回一個 Notation 列表 List l = (List) getProperty("javax.xml.stream.notations");
以下調用將返回一個實體宣告列表:List l = (List) getProperty("javax.xml.stream.entities");
這些屬性只能在 DTD 事件中存取,並且被定義為如果資訊不可用,則返回 null。
下表描述了各種狀態所對應的有效方法。如果某種方法是在無效狀態中調用的,則該方法將拋出 java.lang.IllegalStateException。
每種狀態對應的有效方法 | |
---|---|
事件型別 | 有效方法 |
所有狀態 | getProperty()、hasNext()、require()、close()、getNamespaceURI()、isStartElement()、isEndElement()、isCharacters()、isWhiteSpace()、getNamespaceContext()、getEventType()、getLocation()、hasText()、hasName() |
START_ELEMENT | next()、getName()、getLocalName()、hasName()、getPrefix()、getAttributeXXX()、isAttributeSpecified()、getNamespaceXXX()、getElementText()、nextTag() | ATTRIBUTE | next()、nextTag()、getAttributeXXX()、isAttributeSpecified() | NAMESPACE | next()、nextTag()、getNamespaceXXX() |
END_ELEMENT | next()、getName()、getLocalName()、hasName()、getPrefix()、getNamespaceXXX()、nextTag() |
CHARACTERS | next()、getTextXXX()、nextTag() |
CDATA | next()、getTextXXX()、nextTag() |
COMMENT | next()、getTextXXX()、nextTag() |
SPACE | next()、getTextXXX()、nextTag() |
START_DOCUMENT | next()、getEncoding()、getVersion()、isStandalone()、standaloneSet()、getCharacterEncodingScheme()、nextTag() |
END_DOCUMENT | close() |
PROCESSING_INSTRUCTION | next()、getPITarget()、getPIData()、nextTag() |
ENTITY_REFERENCE | next()、getLocalName()、getText()、nextTag() |
DTD | next()、getText()、nextTag() |
XMLEvent
,
XMLInputFactory
,
XMLStreamWriter
欄位摘要 |
---|
從介面 javax.xml.stream.XMLStreamConstants 繼承的欄位 |
---|
ATTRIBUTE, CDATA, CHARACTERS, COMMENT, DTD, END_DOCUMENT, END_ELEMENT, ENTITY_DECLARATION, ENTITY_REFERENCE, NAMESPACE, NOTATION_DECLARATION, PROCESSING_INSTRUCTION, SPACE, START_DOCUMENT, START_ELEMENT |
方法摘要 | |
---|---|
void |
close()
釋放與此 Reader 關聯的所有資源。 |
int |
getAttributeCount()
返回此 START_ELEMENT 中的屬性計數,此方法僅對 START_ELEMENT 或 ATTRIBUTE 有效。 |
String |
getAttributeLocalName(int index)
返回所提供索引處的屬性的 localName |
QName |
getAttributeName(int index)
返回所提供索引處的屬性的 qname |
String |
getAttributeNamespace(int index)
返回所提供索引處的屬性的名稱空間 |
String |
getAttributePrefix(int index)
返回所提供索引處的屬性的前綴 |
String |
getAttributeType(int index)
返回所提供索引處的屬性的 XML 型別 |
String |
getAttributeValue(int index)
返回 index 處的屬性值 |
String |
getAttributeValue(String namespaceURI,
String localName)
返回帶有名稱空間和 localName 的屬性的規範化屬性值。 |
String |
getCharacterEncodingScheme()
返回 xml 宣告中宣告的字元編碼。 |
String |
getElementText()
讀取純文本元素的內容,如果不是純文本元素,則拋出異常。 |
String |
getEncoding()
如果輸入編碼已知,則返回輸入編碼;如果未知,則返回 null。 |
int |
getEventType()
返回一個整數碼,指示鼠標所指向的事件的型別。 |
String |
getLocalName()
返回當前事件的(本地)名稱。 |
Location |
getLocation()
返回處理器的當前位置。 |
QName |
getName()
返回當前 START_ELEMENT 或 END_ELEMENT 事件的 QName |
NamespaceContext |
getNamespaceContext()
返回當前位置的只讀名稱空間上下文。 |
int |
getNamespaceCount()
返回在 START_ELEMENT 或 END_ELEMENT 中宣告的名稱空間的計數,此方法僅對 START_ELEMENT、END_ELEMENT 或 NAMESPACE 有效。 |
String |
getNamespacePrefix(int index)
返回在 index 處宣告的名稱空間前綴。 |
String |
getNamespaceURI()
如果當前事件是 START_ELEMENT 或 END_ELEMENT,則此方法返回前綴的 URI 或預設名稱空間。 |
String |
getNamespaceURI(int index)
返回在 index 處宣告的名稱空間 URI。 |
String |
getNamespaceURI(String prefix)
返回給定前綴的 URI。 |
String |
getPIData()
獲取處理指令的資料節 |
String |
getPITarget()
獲取處理指令的目標 |
String |
getPrefix()
返回當前事件的前綴,如果事件沒有前綴,則返回 null |
Object |
getProperty(String name)
從底層實作獲取功能/屬性的值 |
String |
getText()
以字元串的形式返回解析事件的當前值,此方法返回 CHARACTERS 事件的字元串值,返回 COMMENT 的值、ENTITY_REFERENCE 的替代值、CDATA 節的字元串值、SPACE 事件的字元串值、DTD 內部子集的字元串值。 |
char[] |
getTextCharacters()
返回一個套件含此事件中字元的陣列。 |
int |
getTextCharacters(int sourceStart,
char[] target,
int targetStart,
int length)
獲取與 CHARACTERS、SPACE 或 CDATA 事件關聯的文本。 |
int |
getTextLength()
返回文本字元陣列中此文本事件的字元序列長度。 |
int |
getTextStart()
返回存儲(此文本事件的)第一個字元位置處的文本字元陣列的偏移量。 |
String |
getVersion()
獲取在 xml 宣告中宣告的 xml 版本,如果沒有宣告版本,則返回 null |
boolean |
hasName()
如果當前事件有名稱(是 START_ELEMENT 或 END_ELEMENT),則返回 ture,否則返回 false |
boolean |
hasNext()
如果有多個解析事件,則返回 true,如果不再有事件,則返回 false。 |
boolean |
hasText()
如果當前事件具有文本,則返回 true,否則返回 false。 |
boolean |
isAttributeSpecified(int index)
返回一個 boolean 值,它指示此屬性是否為預設創建的 |
boolean |
isCharacters()
如果鼠標指向字元資料事件,則返回 true |
boolean |
isEndElement()
如果鼠標指向結束標記,則返回 true(否則返回 false) |
boolean |
isStandalone()
獲取 xml 宣告中的獨立宣告 |
boolean |
isStartElement()
如果鼠標指向開始標記,則返回 true(否則返回 false) |
boolean |
isWhiteSpace()
如果鼠標指向由所有空格組成的字元資料事件,則返回 true |
int |
next()
獲取下一個解析事件??處理器可以用單個存儲塊返回所有連續的字元資料,它也可以將其分割成幾個存儲塊。 |
int |
nextTag()
在到達 START_ELEMENT 或 END_ELEMENT 之前,跳過所有空格(isWhiteSpace() 返回 true)、COMMENT 或 PROCESSING_INSTRUCTION。 |
void |
require(int type,
String namespaceURI,
String localName)
測試當前事件是否屬於給定的型別,以及名稱空間和名稱是否與當前事件的當前名稱空間和名稱相比對。 |
boolean |
standaloneSet()
檢查文檔中是否設置了獨立 |
方法詳細資訊 |
---|
Object getProperty(String name) throws IllegalArgumentException
name
- 屬性的名稱,不可以為 null
IllegalArgumentException
- 如果名稱為 nullint next() throws XMLStreamException
假設給定以下 XML:
<foo><!--description-->內容文本<![CDATA[<greeting>Hello</greeting>]]>其他內容</foo>
對 foo 調用 next() 的行為將是:
1- 註釋 (COMMENT)
2- 然後是字元節 (CHARACTERS)
3- 接下來是 CDATA 節(另一個 CHARACTERS)
4- 再接下來是下一個字元節 (另一個 CHARACTERS)
5- 最後是 END_ELEMENT
註: 空元素(如 <tag/>)將用以下兩個單獨的事件報告:START_ELEMENT 和 END_ELEMENT??這保證了空元素對 <tag></tag> 解析的等效性。 如果是在 hasNext() 返回 false 之後調用此方法,則此方法將拋出 IllegalStateException。
NoSuchElementException
- 如果在 hasNext() 返回 false 時調用
XMLStreamException
- 如果處理底層 XML 源時發生錯誤XMLEvent
void require(int type, String namespaceURI, String localName) throws XMLStreamException
type
- 事件型別namespaceURI
- 事件的 URI,可以為 nulllocalName
- 事件的 localName,可以為 null
XMLStreamException
- 如果所需值不比對。String getElementText() throws XMLStreamException
if(getEventType() != XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException( "parser must be on START_ELEMENT to read next text", getLocation()); } int eventType = next(); StringBuffer content = new StringBuffer(); while(eventType != XMLStreamConstants.END_ELEMENT ) { if(eventType == XMLStreamConstants.CHARACTERS || eventType == XMLStreamConstants.CDATA || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.ENTITY_REFERENCE) { buf.append(getText()); } else if(eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT) { // skipping } else if(eventType == XMLStreamConstants.END_DOCUMENT) { throw new XMLStreamException( "unexpected end of document when reading element text content", this); } else if(eventType == XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException( "element text content may not contain START_ELEMENT", getLocation()); } else { throw new XMLStreamException( "Unexpected event type "+eventType, getLocation()); } eventType = next(); } return buf.toString();
XMLStreamException
- 如果當前事件不是 START_ELEMENT 或者遇到了非文本元素int nextTag() throws XMLStreamException
int eventType = next(); while((eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace()) // skip whitespace || (eventType == XMLStreamConstants.CDATA && isWhiteSpace()) // skip whitespace || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT ) { eventType = next(); } if (eventType != XMLStreamConstants.START_ELEMENT && eventType != XMLStreamConstants.END_ELEMENT) { throw new String XMLStreamException("expected start or end tag", getLocation()); } return eventType;
XMLStreamException
- 如果當前事件不是空格、PROCESSING_INSTRUCTION、START_ELEMENT 或 END_ELEMENT
NoSuchElementException
- 如果它在 hasNext() 返回 false 時被調用boolean hasNext() throws XMLStreamException
XMLStreamException
- 如果檢測下一個狀態時發生嚴重錯誤void close() throws XMLStreamException
XMLStreamException
- 如果釋放關聯資源時發生錯誤String getNamespaceURI(String prefix)
註:根據 Namespaces in XML 規範中的定義,'xml' 前綴被綁定到 "http://www.w3.org/XML/1998/namespace"。
註:'xmlns' 前綴必須被解析到以下名稱空間:http://www.w3.org/2000/xmlns/
prefix
- 要尋找的前綴,不可以為 null
IllegalArgumentException
- 如果前綴為 nullboolean isStartElement()
boolean isEndElement()
boolean isCharacters()
boolean isWhiteSpace()
String getAttributeValue(String namespaceURI, String localName)
namespaceURI
- 屬性的名稱空間localName
- 屬性的本地名稱,不可以為 null
IllegalStateException
- 如果不是 START_ELEMENT 或 ATTRIBUTEint getAttributeCount()
IllegalStateException
- 如果這不是 START_ELEMENT 或 ATTRIBUTEQName getAttributeName(int index)
index
- 屬性的位置
IllegalStateException
- 如果不是 START_ELEMENT 或 ATTRIBUTEString getAttributeNamespace(int index)
index
- 屬性的位置
IllegalStateException
- 如果不是 START_ELEMENT 或 ATTRIBUTEString getAttributeLocalName(int index)
index
- 屬性的位置
IllegalStateException
- 如果不是 START_ELEMENT 或 ATTRIBUTEString getAttributePrefix(int index)
index
- 屬性的位置
IllegalStateException
- 如果不是 START_ELEMENT 或 ATTRIBUTEString getAttributeType(int index)
index
- 屬性的位置
IllegalStateException
- 如果不是 START_ELEMENT 或 ATTRIBUTEString getAttributeValue(int index)
index
- 屬性的位置
IllegalStateException
- 如果不是 START_ELEMENT 或 ATTRIBUTEboolean isAttributeSpecified(int index)
index
- 屬性的位置
IllegalStateException
- 如果不是 START_ELEMENT 或 ATTRIBUTEint getNamespaceCount()
IllegalStateException
- 如果不是 START_ELEMENT、END_ELEMENT 或 NAMESPACEString getNamespacePrefix(int index)
index
- 名稱空間宣告的位置
IllegalStateException
- 如果不是 START_ELEMENT、END_ELEMENT 或 NAMESPACEString getNamespaceURI(int index)
index
- 名稱空間宣告的位置
IllegalStateException
- 如果不是 START_ELEMENT、END_ELEMENT 或 NAMESPACENamespaceContext getNamespaceContext()
int getEventType()
String getText()
IllegalStateException
- 如果此狀態不是有效的文本狀態。char[] getTextCharacters()
IllegalStateException
- 如果此狀態不是有效的文本狀態。int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException
int length = 1024; char[] myBuffer = new char[ length ];
for ( int sourceStart = 0 ; ; sourceStart += length ) { int nCopied = stream.getTextCharacters( sourceStart, myBuffer, 0, length );
if (nCopied < length) break; }
如果在底層源中存在任何 XML 錯誤,則拋出 XMLStreamException。"targetStart" 參數必須大於等於 0 且小於 "target" 的長度,Length 必須大於 0,而 "targetStart + length" 必須小於等於 "target" 的長度。
sourceStart
- 要複製的源陣列中第一個字元的索引target
- 目標陣列targetStart
- 目標陣列中的起始偏移量length
- 要複製的字元數
XMLStreamException
- 如果底層 XML 源不是格式良好的
IndexOutOfBoundsException
- 如果 targetStart < 0 或 > 目標長度
IndexOutOfBoundsException
- 如果 length < 0 或 targetStart + length > 目標長度
UnsupportedOperationException
- 如果此方法不受支持
NullPointerException
- 如果目標為 nullint getTextStart()
IllegalStateException
- 如果此狀態不是有效的文本狀態。int getTextLength()
IllegalStateException
- 如果此狀態不是有效的文本狀態。String getEncoding()
boolean hasText()
Location getLocation()
QName getName()
IllegalStateException
- 如果不是 START_ELEMENT 或 END_ELEMENTString getLocalName()
IllegalStateException
- 如果不是 START_ELEMENT、END_ELEMENT 或 ENTITY_REFERENCEboolean hasName()
String getNamespaceURI()
String getPrefix()
String getVersion()
boolean isStandalone()
boolean standaloneSet()
String getCharacterEncodingScheme()
String getPITarget()
String getPIData()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。