public interface XMLStreamReader extends XMLStreamConstants
设计的xmlstreamreader遍历XML使用next()和hasnext()。数据可以使用方法如geteventtype(),getnamespaceuri()访问,getlocalname()和gettext();
的next()方法使读者读下解析事件。的next()方法返回一个标识事件类型只读整数。
事件类型可确定使用getEventType()。
解析事件定义为XML声明,DTD,开始标记,字符数据的空白,结束标签,评论,或处理指令。一个属性或命名空间事件可能在文档的根级别上遇到,作为查询操作的结果。
1遵守XML XML处理器必须通过申报未分析实体的标识符,符号声明和相关标识符的应用。此信息通过该接口上的属性接口提供。以下两个属性允许访问这些信息:javax.xml.stream.notations和javax.xml.stream.entities。当当前的事件是一个DTD下面的调用将返回一个列表的符号List l = (List) getProperty("javax.xml.stream.notations");
下面的调用将返回一个列表的实体声明:List l = (List) getProperty("javax.xml.stream.entities");
这些属性只能DTD事件期间访问和定义如果信息不可用,返回null。
下表介绍了哪些方法在什么状态下是有效的。如果一个方法处于无效状态的方法将抛出一个java.lang.illegalstateexception叫。
Valid methods for each state | |
---|---|
Event Type | Valid Methods |
All States | 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
ATTRIBUTE, CDATA, CHARACTERS, COMMENT, DTD, END_DOCUMENT, END_ELEMENT, ENTITY_DECLARATION, ENTITY_REFERENCE, NAMESPACE, NOTATION_DECLARATION, PROCESSING_INSTRUCTION, SPACE, START_DOCUMENT, START_ELEMENT
Modifier and Type | Method and Description |
---|---|
void |
close()
释放与此读者相关联的任何资源。
|
int |
getAttributeCount()
在这start_element属性返回的计数,这种方法在start_element或属性才有效。
|
String |
getAttributeLocalName(int index)
返回提供的索引属性的LocalName
|
QName |
getAttributeName(int index)
返回提供的索引属性的属性
|
String |
getAttributeNamespace(int index)
返回所提供索引处的属性的命名空间
|
String |
getAttributePrefix(int index)
在所提供的索引处返回此属性的前缀
|
String |
getAttributeType(int index)
返回所提供的索引的属性的XML类型
|
String |
getAttributeValue(int index)
返回索引中的属性的值
|
String |
getAttributeValue(String namespaceURI, String localName)
返回与命名空间和LocalName属性归一化的属性值如果namespaceURI为命名空间不检查空平等
|
String |
getCharacterEncodingScheme()
返回XML声明中声明的字符编码,如果没有声明,将返回null
|
String |
getElementText()
读取仅文本元素的内容,如果这不是一个文本唯一元素,则抛出异常。
|
String |
getEncoding()
返回输入编码,如果已知或无效,如果未知。
|
int |
getEventType()
返回一个整数代码,该代码指示光标指向的事件的类型。
|
String |
getLocalName()
返回当前事件的(本地)名称。
|
Location |
getLocation()
返回处理器的当前位置。
|
QName |
getName()
返回一个属性为当前start_element或end_element事件
|
NamespaceContext |
getNamespaceContext()
返回当前位置的只读命名空间上下文。
|
int |
getNamespaceCount()
返回在这start_element或end_element声明命名空间的计数,这种方法在start_element是唯一有效的,end_element或命名空间。
|
String |
getNamespacePrefix(int index)
返回在索引中声明的命名空间的前缀。
|
String |
getNamespaceURI()
如果当前的事件是一个start_element或end_element此方法返回的默认命名空间的URI前缀或。
|
String |
getNamespaceURI(int index)
返回命名空间URI定义在指数。
|
String |
getNamespaceURI(String prefix)
返回给定的URI前缀。
|
String |
getPIData()
获取处理指令的数据部分
|
String |
getPITarget()
获取处理指令的目标
|
String |
getPrefix()
如果事件没有前缀,返回当前事件或空的前缀
|
Object |
getProperty(String name)
从底层实现获取一个功能/属性的值
|
String |
getText()
以字符串的形式返回解析事件的当前值,此返回一个字符事件的字符串值,返回一个评论的价值,一个entity_reference替换值,一个CDATA部分的字符串值,为空间事件的字符串值,或对DTD内部子集的字符串值。
|
char[] |
getTextCharacters()
返回一个包含此事件中的字符的数组。
|
int |
getTextCharacters(int sourceStart, char[] target, int targetStart, int length)
获取文本有关联的人物、空间或CDATA事件。
|
int |
getTextLength()
返回文本字符数组中此文本事件的字符序列的长度。
|
int |
getTextStart()
将偏移量返回到存储的文本字符数组中,其中存储第一个字符(此文本事件的)。
|
String |
getVersion()
获取XML声明上声明的XML版本,如果没有声明,将返回null
|
boolean |
hasName()
如果当前的事件都有一个名字返回true(是一个start_element或end_element)否则返回false
|
boolean |
hasNext()
如果有更多的分析事件和错误,如果没有更多的事件,返回真的。
|
boolean |
hasText()
如果当前事件的文本返回true,否则为假以下事件的文本:字符、DTD、entity_reference,评论,空间
|
boolean |
isAttributeSpecified(int index)
返回一个布尔值,该值表示如果这个属性是默认创建的
|
boolean |
isCharacters()
如果光标指向一个字符数据事件,则返回真
|
boolean |
isEndElement()
如果光标指向一个结束标记(否则为假),则返回真
|
boolean |
isStandalone()
从XML声明中获得独立声明
|
boolean |
isStartElement()
如果光标指向一个开始标记(否则为假),则返回真
|
boolean |
isWhiteSpace()
如果光标指向字符数据的事件,包括所有的空格返回true
|
int |
next()
获取下一个解析事件-一个处理器可以在一个块中返回所有连续的字符数据,或者它可以将它分割成几块。
|
int |
nextTag()
跳过任何空格(iswhitespace()返回true),评论,或processing_instruction,直到start_element或end_element达到。
|
void |
require(int type, String namespaceURI, String localName)
测试如果当前事件是给定类型的,如果命名空间和名称与当前事件的当前命名空间和名称匹配。
|
boolean |
standaloneSet()
检查是否在文档中设置独立设置
|
Object getProperty(String name) throws IllegalArgumentException
name
-属性的名称,不得空
IllegalArgumentException
如果名称是空的
int next() throws XMLStreamException
给定下面的XML:
<foo > <!描述- >内容文本>![ CDATA [ < > > < /问候问候你好] ] >其他内容
行为next()时调用foo将:
1评论(评论)
2然后人物部分(字符)
3然后CDATA部分(另一个字符)
4然后下一字符段(另一个字符)
5然后end_element
注:空元素(如 <标签> )将报告两个事件:start_element,end_element -这保留解析空元等价 <标签> <标签> 。该方法将返回false,如果是后hasnext()叫抛出一个IllegalStateException。 标签> 标签> 标签>
NoSuchElementException
-如果这就叫hasnext()返回false
XMLStreamException
-如果有处理底层的XML源的错误
XMLEvent
void require(int type, String namespaceURI, String localName) throws XMLStreamException
type
-事件类型
namespaceURI
-事件的URI,可能是空的
localName
-事件localname,可能是空的
XMLStreamException
-如果需要的值不匹配。
String getElementText() throws XMLStreamException
如果(geteventtype()!= xmlstreamconstants。start_element){把新的xmlstreamexception(“start_element解析器必须在下次阅读文本”,getlocation());}事件类型为int next();StringBuffer内容=新stringbuffer();而(事件类型!= xmlstreamconstants.end_element){如果(事件类型= = xmlstreamconstants.characters| |事件类型= = xmlstreamconstants.cdata| |事件类型= = xmlstreamconstants.space| |事件类型= = xmlstreamconstants。entity_reference){但追加(gettext());} else if(事件类型= = xmlstreamconstants.processing_instruction| |事件类型= = xmlstreamconstants。评论){/ /跳绳} else if(事件类型= = xmlstreamconstants。end_document){把新的xmlstreamexception(“读取元素文本内容时的意外结束文档”,此);} else if(事件类型= = xmlstreamconstants。start_element){把新的xmlstreamexception(“元文本内容可能不包含start_element”,getlocation());其他{ }把新的xmlstreamexception(“突发事件”+事件类型,getlocation());}事件类型= next();}但tostring()返回;
XMLStreamException
-如果当前事件不是一个start_element或者遇到一个非文本元素
int nextTag() throws XMLStreamException
事件类型为int next();而((事件类型= = xmlstreamconstants.characters & iswhitespace())/跳过空白| |(事件类型= = xmlstreamconstants.cdata & iswhitespace())/ /跳过空白| |事件类型= = xmlstreamconstants.space| |事件类型= = xmlstreamconstants.processing_instruction| |事件类型= = xmlstreamconstants.comment){事件类型= next();}如果(事件类型!= xmlstreamconstants.start_element和事件类型!= xmlstreamconstants。end_element){把新的字符串(“xmlstreamexception预期开始或结束标记”,getlocation());}返回事件类型;
XMLStreamException
-如果当前事件不是白色的空间,processing_instruction,start_element或end_element
NoSuchElementException
-如果这就叫hasnext()返回false
boolean hasNext() throws XMLStreamException
XMLStreamException
-如果有一个致命的错误检测的下一个状态
void close() throws XMLStreamException
XMLStreamException
-如果有错误释放相关资源
String getNamespaceURI(String prefix)
注:the 'xml'前缀绑定在Namespaces in XML规范定义为“HTTP:/ /两。org / XML / 1998 /命名空间”。
注:“xmlns”前缀必须解决以下命名空间http://www.w3.org/2000/xmlns/
prefix
-前缀查找,不得空
IllegalArgumentException
如果前缀是空的
boolean isStartElement()
boolean isEndElement()
boolean isCharacters()
boolean isWhiteSpace()
String getAttributeValue(String namespaceURI, String localName)
namespaceURI
-属性的命名空间
localName
-属性的本地名称不能为空
IllegalStateException
-如果这不是一个start_element或属性
int getAttributeCount()
IllegalStateException
-如果这不是一个start_element或属性
QName getAttributeName(int index)
index
-属性的位置
IllegalStateException
-如果这不是一个start_element或属性
String getAttributeNamespace(int index)
index
-属性的位置
IllegalStateException
-如果这不是一个start_element或属性
String getAttributeLocalName(int index)
index
-属性的位置
IllegalStateException
-如果这不是一个start_element或属性
String getAttributePrefix(int index)
index
-属性的位置
IllegalStateException
-如果这不是一个start_element或属性
String getAttributeType(int index)
index
-属性的位置
IllegalStateException
-如果这不是一个start_element或属性
String getAttributeValue(int index)
index
-属性的位置
IllegalStateException
-如果这不是一个start_element或属性
boolean isAttributeSpecified(int index)
index
-属性的位置
IllegalStateException
-如果这不是一个start_element或属性
int getNamespaceCount()
IllegalStateException
-如果这不是一个start_element,end_element或命名空间
String getNamespacePrefix(int index)
index
-命名空间声明的位置
IllegalStateException
-如果这不是一个start_element,end_element或命名空间
String getNamespaceURI(int index)
index
-命名空间声明的位置
IllegalStateException
-如果这不是一个start_element,end_element或命名空间
NamespaceContext 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; }
xmlstreamexception可能有潜在的源XML抛出的错误。“对象间复制”参数必须大于或等于0和小于“目标”的长度,长度必须大于0”对象间复制+长度必须小于或等于长度的“目标”。
sourceStart
-源数组中复制的第一个字符的索引
target
-目标数组
targetStart
的起始偏移在目标阵列
length
-字符数复制
XMLStreamException
如果底层的XML源形成不好
IndexOutOfBoundsException
如果对象间复制<0或>比目标长度
IndexOutOfBoundsException
如果长度<0或对象间复制目标+长度>长度
UnsupportedOperationException
-如果不支持这个方法
NullPointerException
-如果目标是空的
int getTextStart()
IllegalStateException
-如果这种状态是不是一个有效的文本状态。
int getTextLength()
IllegalStateException
-如果这种状态是不是一个有效的文本状态。
String getEncoding()
boolean hasText()
Location getLocation()
QName getName()
IllegalStateException
-如果这不是一个start_element或end_element
String getLocalName()
IllegalStateException
-如果这不是一个start_element,end_element或entity_reference
boolean hasName()
String getNamespaceURI()
String getPrefix()
String getVersion()
boolean isStandalone()
boolean standaloneSet()
String getCharacterEncodingScheme()
String getPITarget()
String getPIData()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.