Module java.xml

Class StreamReaderDelegate

java.lang.Object
javax.xml.stream.util.StreamReaderDelegate
所有已实现的接口:
XMLStreamConstants, XMLStreamReader

public class StreamReaderDelegate extends Object implements XMLStreamReader
这是用于派生XMLStreamReader过滤器的基类。该类设计为位于XMLStreamReader和应用程序的XMLStreamReader之间。默认情况下,每个方法什么也不做,只是调用父接口上的相应方法。
自:
1.6
参见:
  • Constructor Details

    • StreamReaderDelegate

      public StreamReaderDelegate()
      构造一个没有父级的空过滤器。
    • StreamReaderDelegate

      public StreamReaderDelegate(XMLStreamReader reader)
      构造一个具有指定父级的过滤器。
      参数:
      reader - 父级
  • Method Details

    • setParent

      public void setParent(XMLStreamReader reader)
      设置此实例的父级。
      参数:
      reader - 新的父级
    • getParent

      public XMLStreamReader getParent()
      获取此实例的父级。
      返回:
      父级,如果未设置则返回null
    • next

      public int next() throws XMLStreamException
      从接口复制的描述: XMLStreamReader
      获取下一个解析事件 - 处理器可以将所有连续的字符数据返回为单个块,也可以将其拆分为多个块。如果属性javax.xml.stream.isCoalescing设置为true,则元素内容必须合并,并且对于连续元素内容或CDATA部分,只能返回一个CHARACTERS事件。默认情况下,实体引用必须被展开并透明地报告给应用程序。如果无法展开实体引用,则会抛出异常。如果元素内容为空(即内容为""),则不会报告任何CHARACTERS事件。

      给定以下XML:
      <foo><!--description-->content text<![CDATA[<greeting>Hello>/greeting>]]>other content>/foo>
      在foo上调用next()的行为将是:
      1- 注释(COMMENT)
      2- 然后是字符部分(CHARACTERS)
      3- 然后是CDATA部分(另一个CHARACTERS)
      4- 然后是下一个字符部分(另一个CHARACTERS)
      5- 然后是END_ELEMENT

      注意: 空元素(例如<tag/>)将报告为两个单独的事件:START_ELEMENT,END_ELEMENT - 这保留了空元素与<tag></tag>的解析等效性。

      指定者:
      next 在接口 XMLStreamReader
      返回:
      与当前解析事件对应的整数代码
      抛出:
      XMLStreamException - 如果处理底层XML源时出现错误
      参见:
    • nextTag

      public int nextTag() throws XMLStreamException
      从接口复制的描述: XMLStreamReader
      跳过任何空格(isWhiteSpace()返回true)、COMMENT或PROCESSING_INSTRUCTION,直到达到START_ELEMENT或END_ELEMENT。如果遇到除空格字符、COMMENT、PROCESSING_INSTRUCTION、START_ELEMENT、END_ELEMENT之外的内容,则抛出异常。当处理仅由空格分隔的仅元素内容时应使用此方法。
      前提条件: 无
      后置条件: 当前事件为START_ELEMENT或END_ELEMENT,光标可能已移动到任何空格事件上。
      本质上,它执行以下操作(实现可以进行优化,但必须执行等效处理):
       
       int eventType = next();
       while((eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace()) // 跳过空格
       || (eventType == XMLStreamConstants.CDATA && isWhiteSpace())
       // 跳过空格
       || 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; 
       
      指定者:
      nextTag 在接口 XMLStreamReader
      返回:
      读取的元素的事件类型(START_ELEMENT或END_ELEMENT)
      抛出:
      XMLStreamException - 如果当前事件不是空格、PROCESSING_INSTRUCTION、START_ELEMENT或END_ELEMENT
    • getElementText

      public String getElementText() throws XMLStreamException
      从接口复制的描述: XMLStreamReader
      Reads the content of a text-only element, an exception is thrown if this is not a text-only element. Regardless of value of javax.xml.stream.isCoalescing this method always returns coalesced content.
      Precondition: the current event is START_ELEMENT.
      Postcondition: the current event is the corresponding END_ELEMENT.
      The method does the following (implementations are free to optimized but must do equivalent processing):
       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();
       
      Specified by:
      getElementText in interface XMLStreamReader
      Returns:
      the content of a text-only element
      Throws:
      XMLStreamException - if the current event is not a START_ELEMENT or if a non text element is encountered
    • require

      public void require(int type, String namespaceURI, String localName) throws XMLStreamException
      Description copied from interface: XMLStreamReader
      Test if the current event is of the given type and if the namespace and name match the current namespace and name of the current event. If the namespaceURI is null it is not checked for equality, if the localName is null it is not checked for equality.
      Specified by:
      require in interface XMLStreamReader
      Parameters:
      type - the event type
      namespaceURI - the uri of the event, may be null
      localName - the localName of the event, may be null
      Throws:
      XMLStreamException - if the required values are not matched.
    • hasNext

      public boolean hasNext() throws XMLStreamException
      Description copied from interface: XMLStreamReader
      Returns true if there are more parsing events and false if there are no more events. This method will return false if the current state of the XMLStreamReader is END_DOCUMENT
      Specified by:
      hasNext in interface XMLStreamReader
      Returns:
      true if there are more events, false otherwise
      Throws:
      XMLStreamException - if there is a fatal error detecting the next state
    • close

      public void close() throws XMLStreamException
      Description copied from interface: XMLStreamReader
      Frees any resources associated with this Reader. This method does not close the underlying input source.
      Specified by:
      close in interface XMLStreamReader
      Throws:
      XMLStreamException - if there are errors freeing associated resources
    • getNamespaceURI

      public String getNamespaceURI(String prefix)
      Description copied from interface: XMLStreamReader
      Return the uri for the given prefix. The uri returned depends on the current state of the processor.

      NOTE:The 'xml' prefix is bound as defined in Namespaces in XML specification to "http://www.w3.org/XML/1998/namespace".

      NOTE: The 'xmlns' prefix must be resolved to following namespace http://www.w3.org/2000/xmlns/

      Specified by:
      getNamespaceURI in interface XMLStreamReader
      Parameters:
      prefix - The prefix to lookup, may not be null
      Returns:
      the uri bound to the given prefix or null if it is not bound
    • getNamespaceContext

      public NamespaceContext getNamespaceContext()
      Description copied from interface: XMLStreamReader
      Returns a read only namespace context for the current position. The context is transient and only valid until a call to next() changes the state of the reader.
      Specified by:
      getNamespaceContext in interface XMLStreamReader
      Returns:
      return a namespace context
    • isStartElement

      public boolean isStartElement()
      Description copied from interface: XMLStreamReader
      Returns true if the cursor points to a start tag (otherwise false)
      Specified by:
      isStartElement in interface XMLStreamReader
      Returns:
      true if the cursor points to a start tag, false otherwise
    • isEndElement

      public boolean isEndElement()
      Description copied from interface: XMLStreamReader
      Returns true if the cursor points to an end tag (otherwise false)
      Specified by:
      isEndElement in interface XMLStreamReader
      Returns:
      true if the cursor points to an end tag, false otherwise
    • isCharacters

      public boolean isCharacters()
      Description copied from interface: XMLStreamReader
      Returns true if the cursor points to a character data event
      Specified by:
      isCharacters in interface XMLStreamReader
      Returns:
      true if the cursor points to character data, false otherwise
    • isWhiteSpace

      public boolean isWhiteSpace()
      Description copied from interface: XMLStreamReader
      Returns true if the cursor points to a character data event that consists of all whitespace
      Specified by:
      isWhiteSpace in interface XMLStreamReader
      Returns:
      true if the cursor points to all whitespace, false otherwise
    • getAttributeValue

      public String getAttributeValue(String namespaceUri, String localName)
      Description copied from interface: XMLStreamReader
      Returns the normalized attribute value of the attribute with the namespace and localName If the namespaceURI is null the namespace is not checked for equality
      Specified by:
      getAttributeValue in interface XMLStreamReader
      Parameters:
      namespaceUri - the namespace of the attribute
      localName - the local name of the attribute, cannot be null
      Returns:
      returns the value of the attribute , returns null if not found
    • getAttributeCount

      public int getAttributeCount()
      Description copied from interface: XMLStreamReader
      Returns the count of attributes on this START_ELEMENT, this method is only valid on a START_ELEMENT or ATTRIBUTE. This count excludes namespace definitions. Attribute indices are zero-based.
      Specified by:
      getAttributeCount in interface XMLStreamReader
      Returns:
      returns the number of attributes
    • getAttributeName

      public QName getAttributeName(int index)
      从接口复制的描述: XMLStreamReader
      返回提供的索引处属性的QName
      指定者:
      getAttributeName 在接口 XMLStreamReader
      参数:
      index - 属性的位置
      返回:
      属性的QName
    • getAttributePrefix

      public String getAttributePrefix(int index)
      从接口复制的描述: XMLStreamReader
      返回提供的索引处属性的前缀
      指定者:
      getAttributePrefix 在接口 XMLStreamReader
      参数:
      index - 属性的位置
      返回:
      属性的前缀
    • getAttributeNamespace

      public String getAttributeNamespace(int index)
      从接口复制的描述: XMLStreamReader
      返回提供的索引处属性的命名空间
      指定者:
      getAttributeNamespace 在接口 XMLStreamReader
      参数:
      index - 属性的位置
      返回:
      命名空间URI(可以为null)
    • getAttributeLocalName

      public String getAttributeLocalName(int index)
      从接口复制的描述: XMLStreamReader
      返回提供的索引处属性的本地名称
      指定者:
      getAttributeLocalName 在接口 XMLStreamReader
      参数:
      index - 属性的位置
      返回:
      属性的本地名称
    • getAttributeType

      public String getAttributeType(int index)
      从接口复制的描述: XMLStreamReader
      返回提供的索引处属性的XML类型
      指定者:
      getAttributeType 在接口 XMLStreamReader
      参数:
      index - 属性的位置
      返回:
      属性的XML类型
    • getAttributeValue

      public String getAttributeValue(int index)
      从接口复制的描述: XMLStreamReader
      返回索引处属性的值
      指定者:
      getAttributeValue 在接口 XMLStreamReader
      参数:
      index - 属性的位置
      返回:
      属性值
    • isAttributeSpecified

      public boolean isAttributeSpecified(int index)
      从接口复制的描述: XMLStreamReader
      返回一个布尔值,指示此属性是否是默认创建的
      指定者:
      isAttributeSpecified 在接口 XMLStreamReader
      参数:
      index - 属性的位置
      返回:
      如果这是一个默认属性,则为true
    • getNamespaceCount

      public int getNamespaceCount()
      从接口复制的描述: XMLStreamReader
      返回在此START_ELEMENT或END_ELEMENT上声明的命名空间的计数,此方法仅在START_ELEMENT、END_ELEMENT或NAMESPACE上有效。在END_ELEMENT上,计数是即将超出范围的命名空间。这相当于SAX回调报告的结束元素事件的信息。
      指定者:
      getNamespaceCount 在接口 XMLStreamReader
      返回:
      返回此特定元素上声明的命名空间数量
    • getNamespacePrefix

      public String getNamespacePrefix(int index)
      从接口复制的描述: XMLStreamReader
      返回在索引处声明的命名空间的前缀。如果这是默认命名空间声明,则返回null
      指定者:
      getNamespacePrefix 在接口 XMLStreamReader
      参数:
      index - 命名空间声明的位置
      返回:
      返回命名空间前缀
    • getNamespaceURI

      public String getNamespaceURI(int index)
      从接口复制的描述: XMLStreamReader
      返回在索引处声明的命名空间的URI
      指定者:
      getNamespaceURI 在接口 XMLStreamReader
      参数:
      index - 命名空间声明的位置
      返回:
      返回命名空间URI
    • getEventType

      public int getEventType()
      从接口复制的描述: XMLStreamReader
      返回一个整数代码,指示光标指向的事件类型。初始事件类型为XMLStreamConstants.START_DOCUMENT
      指定者:
      getEventType 在接口 XMLStreamReader
      返回:
      当前事件的类型
    • getText

      public String getText()
      从接口复制的描述: XMLStreamReader
      返回解析事件的当前值作为字符串,这将返回CHARACTERS事件的字符串值,COMMENT的值,ENTITY_REFERENCE的替换值,CDATA部分的字符串值,SPACE事件的字符串值,或DTD内部子集的字符串值。如果已解析ENTITY_REFERENCE,则任何字符数据将报告为CHARACTERS事件。
      指定者:
      getText 在接口 XMLStreamReader
      返回:
      当前文本或null
    • getTextCharacters

      public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException
      从接口复制的描述: XMLStreamReader
      获取与CHARACTERS、SPACE或CDATA事件相关联的文本。从“sourceStart”开始的文本被复制到“target”从“targetStart”开始。最多复制“length”个字符。返回实际复制的字符数。如果实际复制的字符数少于“length”,则没有更多文本。否则,需要进行后续调用,直到检索到所有文本。例如:
      
       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"的长度,长度必须大于0且"targetStart + length"必须小于或等于"target"的长度。
      指定者:
      getTextCharacters 在接口 XMLStreamReader
      参数:
      sourceStart - 要复制的源数组中第一个字符的索引
      target - 目标数组
      targetStart - 目标数组中的起始偏移量
      length - 要复制的字符数
      返回:
      实际复制的字符数
      抛出:
      XMLStreamException - 如果底层XML源格式不正确
    • getTextCharacters

      public char[] getTextCharacters()
      从接口复制的描述: XMLStreamReader
      返回一个包含此事件字符的数组。此数组应被视为只读和瞬态的。即,该数组将包含文本字符,直到XMLStreamReader转移到下一个事件。试图在此时间之后保留字符数组或修改数组内容都违反了此接口的约定。
      指定者:
      getTextCharacters 在接口 XMLStreamReader
      返回:
      当前文本或空数组
    • getTextStart

      public int getTextStart()
      从接口复制的描述: XMLStreamReader
      返回存储第一个字符(此文本事件的)的文本字符数组中的偏移量。
      指定者:
      getTextStart 在接口 XMLStreamReader
      返回:
      文本在字符数组中的起始位置
    • getTextLength

      public int getTextLength()
      从接口复制的描述: XMLStreamReader
      返回此文本事件在文本字符数组中的字符序列的长度。
      指定者:
      getTextLength 在接口 XMLStreamReader
      返回:
      文本的长度
    • getEncoding

      public String getEncoding()
      从接口复制的描述: XMLStreamReader
      如果已知,则返回输入编码;如果未知,则返回null。
      指定者:
      getEncoding 在接口 XMLStreamReader
      返回:
      此实例的编码或null
    • hasText

      public boolean hasText()
      从接口复制的描述: XMLStreamReader
      返回一个布尔值,指示当前事件是否具有文本。以下事件具有文本:CHARACTERS、DTD、ENTITY_REFERENCE、COMMENT、SPACE
      指定者:
      hasText 在接口 XMLStreamReader
      返回:
      如果事件具有文本,则为true;否则为false
    • getLocation

      public Location getLocation()
      从接口复制的描述: XMLStreamReader
      返回处理器的当前位置。如果位置未知,处理器应返回一个Location的实现,该实现对于位置返回-1,对于publicId和systemId返回null。位置信息仅在调用next()之前有效。
      指定者:
      getLocation 在接口 XMLStreamReader
      返回:
      光标的位置
    • getName

      public QName getName()
      从接口复制的描述: XMLStreamReader
      返回当前START_ELEMENT或END_ELEMENT事件的QName
      指定者:
      getName 在接口 XMLStreamReader
      返回:
      当前START_ELEMENT或END_ELEMENT事件的QName
    • getLocalName

      public String getLocalName()
      从接口复制的描述: XMLStreamReader
      返回当前事件的(本地)名称。对于START_ELEMENT或END_ELEMENT,返回当前元素的(本地)名称。对于ENTITY_REFERENCE,返回实体名称。当前事件必须是START_ELEMENT或END_ELEMENT,或ENTITY_REFERENCE
      指定者:
      getLocalName 在接口 XMLStreamReader
      返回:
      本地名称
    • hasName

      public boolean hasName()
      从接口复制的描述: XMLStreamReader
      返回一个布尔值,指示当前事件是否具有名称(是START_ELEMENT或END_ELEMENT)。
      指定者:
      hasName 在接口 XMLStreamReader
      返回:
      如果事件具有名称,则为true;否则为false
    • getNamespaceURI

      public String getNamespaceURI()
      从接口复制的描述: XMLStreamReader
      如果当前事件是START_ELEMENT或END_ELEMENT,则此方法返回前缀或默认命名空间的URI。如果事件没有前缀,则返回null。
      指定者:
      getNamespaceURI 在接口 XMLStreamReader
      返回:
      绑定到此元素前缀的URI、默认命名空间或null
    • getPrefix

      public String getPrefix()
      从接口复制的描述: XMLStreamReader
      返回当前事件的前缀,如果事件没有前缀则返回null
      指定者:
      getPrefix 在接口 XMLStreamReader
      返回:
      前缀或null
    • getVersion

      public String getVersion()
      从接口复制的描述: XMLStreamReader
      获取xml声明中声明的xml版本。如果未声明,则返回null
      指定者:
      getVersion 在接口 XMLStreamReader
      返回:
      XML版本或null
    • isStandalone

      public boolean isStandalone()
      从接口复制的描述: XMLStreamReader
      获取xml声明中的独立声明
      指定者:
      isStandalone 在接口 XMLStreamReader
      返回:
      如果是独立的,则为true;否则为false
    • standaloneSet

      public boolean standaloneSet()
      从接口复制的描述: XMLStreamReader
      检查文档中是否设置了独立标志
      指定者:
      standaloneSet 在接口 XMLStreamReader
      返回:
      如果文档中设置了独立标志,则为true;否则为false
    • getCharacterEncodingScheme

      public String getCharacterEncodingScheme()
      从接口复制的描述: XMLStreamReader
      返回xml声明中声明的字符编码。如果未声明,则返回null
      指定者:
      getCharacterEncodingScheme 在接口 XMLStreamReader
      返回:
      文档中声明的编码或null
    • getPITarget

      public String getPITarget()
      从接口复制的描述: XMLStreamReader
      获取处理指令的目标
      指定者:
      getPITarget 在接口 XMLStreamReader
      返回:
      目标或null
    • getPIData

      public String getPIData()
      从接口复制的描述: XMLStreamReader
      获取处理指令的数据部分
      指定者:
      getPIData 在接口 XMLStreamReader
      返回值:
      数据或null
    • getProperty

      public Object getProperty(String name)
      从接口中复制的描述: XMLStreamReader
      获取底层实现的特性/属性的值
      指定者:
      getProperty 在接口 XMLStreamReader
      参数:
      name - 属性的名称,不可为null
      返回值:
      属性的值