<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc on Thu Sep 25 16:46:56 PDT 2003 -->
<TITLE>
XMLStreamReader (XMLBeans Documentation)
</TITLE>
<META NAME="keywords" CONTENT="javax.xml.stream.XMLStreamReader,XMLStreamReader interface">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="XMLStreamReader (XMLBeans Documentation)";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../javax/xml/stream/XMLStreamConstants.html"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="XMLStreamReader.html" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
javax.xml.stream</FONT>
<BR>
Interface XMLStreamReader</H2>
<DL>
<DT><B>All Superinterfaces:</B> <DD><A HREF="../../../javax/xml/stream/XMLStreamConstants.html">XMLStreamConstants</A></DD>
</DL>
<HR>
<DL>
<DT>public interface <B>XMLStreamReader</B><DT>extends <A HREF="../../../javax/xml/stream/XMLStreamConstants.html">XMLStreamConstants</A></DL>

<P>
The XMLStreamReader interface allows forward, read-only access to XML.
  It is designed to be the lowest level and most efficient way to
  read XML data.

 <p> The XMLStreamReader is designed to iterate over XML using
 next() and hasNext().  The data can be accessed using methods such as getEventType(),
 getNamespaceURI(), getLocalName() and getText();

 <p> <a href="#next()">next()</a> causes the reader to read the next parse event.
 next() returns an integer which identifies the type of event just read
 <p> The event type can be determined using <a href="#getEventType()">getEventType()</a>.
 <p> Parsing events are defined as the XML Declaration, a DTD,
 start tag, character data, white space, end tag, comment,
 or processing instruction

 <p>For XML 1.0 compliance an XML processor must pass the
 identifiers of declared unparsed entities and their
 associated identifiers to the application.  This information is
 provided through the property API on this interface.
 The following two properties allow access to this information:
 javax.xml.stream.notations and javax.xml.stream.entities.
 When the current event is a DTD the following call will return a
 list of Notations
  <code>List l = (List) getProperty("javax.xml.stream.notations");</code>
 The following call will return a list of entity declarations:
 <code>List l = (List) getProperty("javax.xml.stream.entities");</code>
 These properties can only be accessed during a DTD event and
 are defined to return null if the information is not available.

 <p>The following table describes which methods are valid in what state.
 If a method is called in an invalid state the method will throw a
 java.lang.IllegalStateException.

 <table border="2" rules="all" cellpadding="4">
   <thead>
     <tr>
       <th align="center" colspan="2">
         Valid methods for each state
       </th>
     </tr>
   </thead>
   <tbody>
     <tr>
       <th>Event Type</th>
       <th>Valid Methods</th>
     </tr>
     <tr>
       <td> All States  </td>
       <td> getProperty(), hasNext(), require(), close(),
            getNamespaceURI(), isStartElement(),
            isEndElement(), isCharacters(), isWhiteSpace(),
            getNamespaceContext(), getEventType(),getLocation(),
            hasText()
       </td>
     </tr>
     <tr>
       <td> START_ELEMENT  </td>
       <td> next(), getLocalName(), hasName(), getPrefix(),
            getNamespaceURI(),
            getAttributeXXX(), isAttributeSpecified(),
            getNamespaceXXX(),
            getElementText(), nextTag()
       </td>
     </tr>
     <tr>
       <td> END_ELEMENT  </td>
       <td> next(), getLocalName(), hasName(), getPrefix(),
            getNamespaceURI() , getNamespaceXXX(), nextTag()
      </td>
     </tr>
     <tr>
       <td> CHARACTERS  </td>
       <td> next(), getTextXXX(), nextTag() </td>
     </tr>
     <tr>
       <td> CDATA  </td>
       <td> next(), getTextXXX(), nextTag() </td>
     </tr>
     <tr>
       <td> COMMENT  </td>
       <td> next(), getTextXXX(), nextTag() </td>
     </tr>
     <tr>
       <td> SPACE  </td>
       <td> next(), getTextXXX(), nextTag() </td>
     </tr>
     <tr>
       <td> START_DOCUMENT  </td>
       <td> next(), getEncoding(), next(), getPrefix(), getVersion(), isStandalone(), standaloneSet(),
            getCharacterEncodingScheme(), nextTag()</td>
     </tr>
     <tr>
       <td> END_DOCUMENT  </td>
       <td> close()</td>
     </tr>
     <tr>
       <td> PROCESSING_INSTRUCTION  </td>
       <td> next(), getPITarget(), getPIData(), nextTag() </td>
     </tr>
     <tr>
       <td> ENTITY_REFERENCE  </td>
       <td> next(), getLocalName(), getText(), nextTag() </td>
     </tr>
     <tr>
       <td> DTD  </td>
       <td> next(), getText(), nextTag() </td>
     </tr>
   </tbody>
  </table>
<P>

<P>
<DL>
<DT><B>Version:</B></DT>
  <DD>0.6</DD>
<DT><B>Author:</B></DT>
  <DD>Copyright (c) 2003 by BEA Systems. All Rights Reserved.</DD>
<DT><B>See Also:</B><DD><CODE>javax.xml.stream.events.XMLEvent</CODE>, 
<CODE>XMLInputFactory</CODE>, 
<CODE>XMLStreamWriter</CODE></DL>
<HR>

<P>
<!-- ======== NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Field Summary</B></FONT></TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_javax.xml.stream.XMLStreamConstants"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Fields inherited from interface javax.xml.stream.<A HREF="../../../javax/xml/stream/XMLStreamConstants.html">XMLStreamConstants</A></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../javax/xml/stream/XMLStreamConstants.html#ATTRIBUTE">ATTRIBUTE</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#CDATA">CDATA</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#CHARACTERS">CHARACTERS</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#COMMENT">COMMENT</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#DTD">DTD</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#END_DOCUMENT">END_DOCUMENT</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#END_ELEMENT">END_ELEMENT</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#END_ENTITY">END_ENTITY</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#ENTITY_DECLARATION">ENTITY_DECLARATION</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#ENTITY_REFERENCE">ENTITY_REFERENCE</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#NAMESPACE">NAMESPACE</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#NOTATION_DECLARATION">NOTATION_DECLARATION</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#PROCESSING_INSTRUCTION">PROCESSING_INSTRUCTION</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#SPACE">SPACE</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#START_DOCUMENT">START_DOCUMENT</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#START_ELEMENT">START_ELEMENT</A>, <A HREF="../../../javax/xml/stream/XMLStreamConstants.html#START_ENTITY">START_ENTITY</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->


<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#close()">close</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Frees any resources associated with this Reader.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getAttributeCount()">getAttributeCount</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the count of attributes on this START_ELEMENT,
 this method is only valid on a START_ELEMENT.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getAttributeName(int)">getAttributeName</A></B>(int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the localName of the attribute at the provided
 index</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getAttributeNamespace(int)">getAttributeNamespace</A></B>(int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the namespace of the attribute at the provided
 index</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getAttributePrefix(int)">getAttributePrefix</A></B>(int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the prefix of this attribute at the
 provided index</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2ee/1.4/docs/api/javax/xml/namespace/QName.html">QName</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getAttributeQName(int)">getAttributeQName</A></B>(int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getAttributeTextCharacters(int, int, char[], int, int)">getAttributeTextCharacters</A></B>(int&nbsp;index,
                           int&nbsp;sourceStart,
                           char[]&nbsp;myCharArray,
                           int&nbsp;targetStart,
                           int&nbsp;length)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getAttributeType(int)">getAttributeType</A></B>(int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the XML type of the attribute at the provided
 index</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getAttributeValue(int)">getAttributeValue</A></B>(int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the attribute at the
 index</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getAttributeValue(java.lang.String, java.lang.String)">getAttributeValue</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;namespaceURI,
                  <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;localName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getCharacterEncodingScheme()">getCharacterEncodingScheme</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the character encoding declared on the xml declaration
 Returns null if none was declared</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getElementText()">getElementText</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the content of a text-only element.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getEncoding()">getEncoding</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return input encoding if known or null if unknown.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getEventType()">getEventType</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an integer code that indicates the type
 of the event the cursor is pointing to.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getLocalName()">getLocalName</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the (local) name of the current event.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../javax/xml/stream/Location.html">Location</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getLocation()">getLocation</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the current location of the processor.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2ee/1.4/docs/api/javax/xml/namespace/QName.html">QName</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getName()">getName</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getNamespaceCount()">getNamespaceCount</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the count of namespaces declared on this START_ELEMENT or END_ELEMENT,
 this method is only valid on a START_ELEMENT or END_ELEMENT.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getNamespacePrefix(int)">getNamespacePrefix</A></B>(int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the prefix for the namespace declared at the
 index.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getNamespaceURI()">getNamespaceURI</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the current event is a START_ELEMENT or END_ELEMENT  this method
 returns the URI of the prefix or the default namespace.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getNamespaceURI(int)">getNamespaceURI</A></B>(int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the uri for the namespace declared at the
 index.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getNamespaceURI(java.lang.String)">getNamespaceURI</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;prefix)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the uri for the given prefix.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getPIData()">getPIData</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the data section of a processing instruction</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getPITarget()">getPITarget</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the target of a processing instruction</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getPrefix()">getPrefix</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the prefix of the current event or null if the event does not have a prefix</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getProperty(java.lang.String)">getProperty</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;name)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the value of a feature/property from the underlying implementation</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getText()">getText</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the current value of the parse event as a string,
 this returns the string value of a CHARACTERS event,
 returns the value of a COMMENT, the replacement value
 for an ENTITY_REFERENCE,
 or the String value of the DTD</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;char[]</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getTextCharacters()">getTextCharacters</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array which contains the characters from this event.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getTextCharacters(char[], int, int)">getTextCharacters</A></B>(char[]&nbsp;myCharArray,
                  int&nbsp;targetStart,
                  int&nbsp;length)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getTextLength()">getTextLength</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the length of the sequence of characters within for this
 Text event within the TextCharacterArray.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/Reader.html">Reader</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getTextReader()">getTextReader</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getTextStart()">getTextStart</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the offset into the TextCharacter array where the first
 character (of this text event) is stored.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#getVersion()">getVersion</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the xml version declared on the xml declaration
 Returns null if none was declared</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#hasName()">hasName</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returns true if the current event has a name, START_ELEMENT, END_ELEMENT,
 ENTITY_REFERENCE, and PROCESSING_INSTRUCTION have a name
 returns false otherwise</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#hasNext()">hasNext</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if there are more parsing events and false
 if there are no more events.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#hasText()">hasText</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the current event has text, false otherwise
 The following events have text:
 CHARACTERS,DTD ,ENTITY_REFERENCE, COMMENT</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#isAttributeSpecified(int)">isAttributeSpecified</A></B>(int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a boolean which indicates if this
 attribute was created by default</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#isCharacters()">isCharacters</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if the cursor points to a character data event</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#isEndElement()">isEndElement</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if the cursor points to an end tag (otherwise false)</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#isStandalone()">isStandalone</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the standalone declaration from the xml declaration</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#isStartElement()">isStartElement</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if the cursor points to a start tag (otherwise false)</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#isWhiteSpace()">isWhiteSpace</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if the cursor points to a character data event
 that consists of all whitespace</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#next()">next</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get next parsing event - a processor may may return all contiguous
 character data in a single chunk, or it may split it into several chunks.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#nextTag()">nextTag</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Skips any insignificant events until a START_ELEMENT or
 END_ELEMENT is reached.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#require(int, java.lang.String, java.lang.String)">require</A></B>(int&nbsp;type,
        <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;namespaceURI,
        <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;localName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test if the current event is of the given type and if the namespace and name do match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/stream/XMLStreamReader.html#standaloneSet()">standaloneSet</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if standalone was set in the document</TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ FIELD DETAIL =========== -->


<!-- ========= CONSTRUCTOR DETAIL ======== -->


<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=1><FONT SIZE="+2">
<B>Method Detail</B></FONT></TD>
</TR>
</TABLE>

<A NAME="getProperty(java.lang.String)"><!-- --></A><H3>
getProperty</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html">Object</A> <B>getProperty</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;name)
                   throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></PRE>
<DL>
<DD>Get the value of a feature/property from the underlying implementation
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>name</CODE> - The name of the property, may not be null
<DT><B>Returns:</B><DD>The value of the property
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if name is null</DL>
</DD>
</DL>
<HR>

<A NAME="next()"><!-- --></A><H3>
next</H3>
<PRE>
public int <B>next</B>()
         throws <A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></PRE>
<DL>
<DD>Get next parsing event - a processor may may return all contiguous
 character data in a single chunk, or it may split it into several chunks.
 If the property javax.xml.stream.isCoalescing is set to true
 element content must be coalesced and only one CHARACTERS event
 must be returned for contiguous element content or
 CDATA Sections.  

 By default entity references must be 
 expanded and reported transparently to the application.
 An exception will be thrown if an entity reference cannot be expanded.
 If element content is empty (i.e. content is "") then no CHARACTERS event will be reported.

 <p>Given the following XML:<br>
 &lt;foo>&lt;!--description-->content text&lt;![CDATA[&lt;greeting>Hello&lt;/greeting>]]>other content&lt;/foo><br>
 The behavior of calling next() when being on foo will be:<br>
 1- the comment (COMMENT)<br>
 2- then the characters section (CHARACTERS)<br>
 3- then the CDATA section (another CHARACTERS)<br>
 4- then the next characters section (another CHARACTERS)<br>
 5- then the END_ELEMENT<br>

 <p><b>NOTE:</b> empty element (such as &lt;tag/>) will be reported
  with  two separate events: START_ELEMENT, END_ELEMENT - This preserves
   parsing equivalency of empty element to &lt;tag>&lt;/tag>.

 This method will throw an XMLStreamException if it is called after hasNext() returns false.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the integer code corresponding to the current parse event
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></CODE> - if this is called when hasNext() returns false<DT><B>See Also:</B><DD><CODE>javax.xml.stream.events.XMLEvent</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="require(int, java.lang.String, java.lang.String)"><!-- --></A><H3>
require</H3>
<PRE>
public void <B>require</B>(int&nbsp;type,
                    <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;namespaceURI,
                    <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;localName)
             throws <A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></PRE>
<DL>
<DD>Test if the current event is of the given type and if the namespace and name do match.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>type</CODE> - the event type<DD><CODE>namespaceURI</CODE> - the uri of the event, may be null<DD><CODE>localName</CODE> - the localName of the event, may not be null
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></CODE> - if the required values are not matched.</DL>
</DD>
</DL>
<HR>

<A NAME="getElementText()"><!-- --></A><H3>
getElementText</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getElementText</B>()
                      throws <A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></PRE>
<DL>
<DD>Reads the content of a text-only element. Precondition:
 the current event is START_ELEMENT. Postcondition:
 The current event is the corresponding END_ELEMENT.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></CODE> - if the current event is not a START_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="nextTag()"><!-- --></A><H3>
nextTag</H3>
<PRE>
public int <B>nextTag</B>()
            throws <A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></PRE>
<DL>
<DD>Skips any insignificant events until a START_ELEMENT or
 END_ELEMENT is reached. If other than space characters are
 encountered, an exception is thrown. This method should
 be used when processing element-only content because
 the parser is not able to recognize ignorable whitespace if
 then DTD is missing or not interpreted.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></CODE> - if the current event is not white space</DL>
</DD>
</DL>
<HR>

<A NAME="hasNext()"><!-- --></A><H3>
hasNext</H3>
<PRE>
public boolean <B>hasNext</B>()
                throws <A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></PRE>
<DL>
<DD>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
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if there are more events, false otherwise
<DD><CODE><A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></CODE></DL>
</DD>
</DL>
<HR>

<A NAME="close()"><!-- --></A><H3>
close</H3>
<PRE>
public void <B>close</B>()
           throws <A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></PRE>
<DL>
<DD>Frees any resources associated with this Reader.  This method does not close the
 underlying input source.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DD><CODE><A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></CODE></DL>
</DD>
</DL>
<HR>

<A NAME="getNamespaceURI(java.lang.String)"><!-- --></A><H3>
getNamespaceURI</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getNamespaceURI</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;prefix)
                       throws <A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></PRE>
<DL>
<DD>Return the uri for the given prefix.
 The uri returned depends on the current state of the parser

 <p>Throws an exception if the prefix is not bound.

 <p><strong>NOTE:</strong>The 'xml' prefix is bound as defined in
 <a href="http://www.w3.org/TR/REC-xml-names/#ns-using">Namespaces in XML</a>
 specification to "http://www.w3.org/XML/1998/namespace".

 <p><strong>NOTE:</strong> The 'xmlns' prefix must be resolved to following namespace
 <a href="http://www.w3.org/2000/xmlns/">http://www.w3.org/2000/xmlns/</a>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>prefix</CODE> - The prefix to lookup, may not be null
<DT><B>Returns:</B><DD>the uri bound to the given prefix or null if it is not bound
<DD><CODE><A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></CODE></DL>
</DD>
</DL>
<HR>

<A NAME="isStartElement()"><!-- --></A><H3>
isStartElement</H3>
<PRE>
public boolean <B>isStartElement</B>()</PRE>
<DL>
<DD>Returns true if the cursor points to a start tag (otherwise false)
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the cursor points to a start tag, false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="isEndElement()"><!-- --></A><H3>
isEndElement</H3>
<PRE>
public boolean <B>isEndElement</B>()</PRE>
<DL>
<DD>Returns true if the cursor points to an end tag (otherwise false)
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the cursor points to an end tag, false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="isCharacters()"><!-- --></A><H3>
isCharacters</H3>
<PRE>
public boolean <B>isCharacters</B>()</PRE>
<DL>
<DD>Returns true if the cursor points to a character data event
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the cursor points to character data, false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="isWhiteSpace()"><!-- --></A><H3>
isWhiteSpace</H3>
<PRE>
public boolean <B>isWhiteSpace</B>()</PRE>
<DL>
<DD>Returns true if the cursor points to a character data event
 that consists of all whitespace
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the cursor points to all whitespace, false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="getAttributeValue(java.lang.String, java.lang.String)"><!-- --></A><H3>
getAttributeValue</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getAttributeValue</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;namespaceURI,
                                <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A>&nbsp;localName)</PRE>
<DL>
<DD>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
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>namespaceURI</CODE> - the namespace of the attribute, can be null<DD><CODE>localName</CODE> - the local name of the attribute, cannot be null
<DT><B>Returns:</B><DD>returns the value of the attribute , returns null if not found
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getAttributeCount()"><!-- --></A><H3>
getAttributeCount</H3>
<PRE>
public int <B>getAttributeCount</B>()</PRE>
<DL>
<DD>Returns the count of attributes on this START_ELEMENT,
 this method is only valid on a START_ELEMENT.  This
 count excludes namespace definitions.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>returns the number of attributes
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getAttributeNamespace(int)"><!-- --></A><H3>
getAttributeNamespace</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getAttributeNamespace</B>(int&nbsp;index)</PRE>
<DL>
<DD>Returns the namespace of the attribute at the provided
 index
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>index</CODE> - the position of the attribute
<DT><B>Returns:</B><DD>the namespace URI (can be null)
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getAttributeName(int)"><!-- --></A><H3>
getAttributeName</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getAttributeName</B>(int&nbsp;index)</PRE>
<DL>
<DD>Returns the localName of the attribute at the provided
 index
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>index</CODE> - the position of the attribute
<DT><B>Returns:</B><DD>the localName of the attribute
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getAttributeQName(int)"><!-- --></A><H3>
getAttributeQName</H3>
<PRE>
public <A HREF="http://java.sun.com/j2ee/1.4/docs/api/javax/xml/namespace/QName.html">QName</A> <B>getAttributeQName</B>(int&nbsp;index)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getAttributeTextCharacters(int, int, char[], int, int)"><!-- --></A><H3>
getAttributeTextCharacters</H3>
<PRE>
public int <B>getAttributeTextCharacters</B>(int&nbsp;index,
                                      int&nbsp;sourceStart,
                                      char[]&nbsp;myCharArray,
                                      int&nbsp;targetStart,
                                      int&nbsp;length)
                               throws <A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DD><CODE><A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></CODE></DL>
</DD>
</DL>
<HR>

<A NAME="getAttributePrefix(int)"><!-- --></A><H3>
getAttributePrefix</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getAttributePrefix</B>(int&nbsp;index)</PRE>
<DL>
<DD>Returns the prefix of this attribute at the
 provided index
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>index</CODE> - the position of the attribute
<DT><B>Returns:</B><DD>the prefix of the attribute
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getAttributeType(int)"><!-- --></A><H3>
getAttributeType</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getAttributeType</B>(int&nbsp;index)</PRE>
<DL>
<DD>Returns the XML type of the attribute at the provided
 index
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>index</CODE> - the position of the attribute
<DT><B>Returns:</B><DD>the XML type of the attribute
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getAttributeValue(int)"><!-- --></A><H3>
getAttributeValue</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getAttributeValue</B>(int&nbsp;index)</PRE>
<DL>
<DD>Returns the value of the attribute at the
 index
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>index</CODE> - the position of the attribute
<DT><B>Returns:</B><DD>the attribute value
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="isAttributeSpecified(int)"><!-- --></A><H3>
isAttributeSpecified</H3>
<PRE>
public boolean <B>isAttributeSpecified</B>(int&nbsp;index)</PRE>
<DL>
<DD>Returns a boolean which indicates if this
 attribute was created by default
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>index</CODE> - the position of the attribute
<DT><B>Returns:</B><DD>true if this is a default attribute
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getNamespaceCount()"><!-- --></A><H3>
getNamespaceCount</H3>
<PRE>
public int <B>getNamespaceCount</B>()</PRE>
<DL>
<DD>Returns the count of namespaces declared on this START_ELEMENT or END_ELEMENT,
 this method is only valid on a START_ELEMENT or END_ELEMENT. On
 an END_ELEMENT the count is of the namespaces that are about to go
 out of scope.  This is the equivalent of the information reported
 by SAX callback for an end element event.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>returns the number of namespace declarations on this specific element
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT or END_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getNamespacePrefix(int)"><!-- --></A><H3>
getNamespacePrefix</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getNamespacePrefix</B>(int&nbsp;index)</PRE>
<DL>
<DD>Returns the prefix for the namespace declared at the
 index.  Returns null if this is the default namespace
 declaration
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>index</CODE> - the position of the namespace declaration
<DT><B>Returns:</B><DD>returns the namespace prefix
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT or END_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getNamespaceURI(int)"><!-- --></A><H3>
getNamespaceURI</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getNamespaceURI</B>(int&nbsp;index)</PRE>
<DL>
<DD>Returns the uri for the namespace declared at the
 index.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>index</CODE> - the position of the namespace declaration
<DT><B>Returns:</B><DD>returns the namespace uri
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this is not a START_ELEMENT or END_ELEMENT</DL>
</DD>
</DL>
<HR>

<A NAME="getEventType()"><!-- --></A><H3>
getEventType</H3>
<PRE>
public int <B>getEventType</B>()</PRE>
<DL>
<DD>Returns an integer code that indicates the type
 of the event the cursor is pointing to.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getText()"><!-- --></A><H3>
getText</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getText</B>()</PRE>
<DL>
<DD>Returns the current value of the parse event as a string,
 this returns the string value of a CHARACTERS event,
 returns the value of a COMMENT, the replacement value
 for an ENTITY_REFERENCE,
 or the String value of the DTD
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the current text or null
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this statex is not
 a valid text state.</DL>
</DD>
</DL>
<HR>

<A NAME="getTextCharacters()"><!-- --></A><H3>
getTextCharacters</H3>
<PRE>
public char[] <B>getTextCharacters</B>()</PRE>
<DL>
<DD>Returns an array which contains the characters from this event.
 This array should be treated as read-only and transient. I.e. the array will
 contain the text characters until the XMLStreamReader moves on to the next event.
 Attempts to hold onto the character array beyond that time or modify the
 contents of the array are breaches of the contract for this interface.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the current text or null
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this state is not
 a valid text state.</DL>
</DD>
</DL>
<HR>

<A NAME="getTextStart()"><!-- --></A><H3>
getTextStart</H3>
<PRE>
public int <B>getTextStart</B>()</PRE>
<DL>
<DD>Returns the offset into the TextCharacter array where the first
 character (of this text event) is stored.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this state is not
 a valid text state.</DL>
</DD>
</DL>
<HR>

<A NAME="getTextLength()"><!-- --></A><H3>
getTextLength</H3>
<PRE>
public int <B>getTextLength</B>()</PRE>
<DL>
<DD>Returns the length of the sequence of characters within for this
 Text event within the TextCharacterArray.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if this state is not
 a valid text state.</DL>
</DD>
</DL>
<HR>

<A NAME="getTextCharacters(char[], int, int)"><!-- --></A><H3>
getTextCharacters</H3>
<PRE>
public int <B>getTextCharacters</B>(char[]&nbsp;myCharArray,
                             int&nbsp;targetStart,
                             int&nbsp;length)
                      throws <A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DD><CODE><A HREF="../../../javax/xml/stream/XMLStreamException.html">XMLStreamException</A></CODE></DL>
</DD>
</DL>
<HR>

<A NAME="getTextReader()"><!-- --></A><H3>
getTextReader</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/Reader.html">Reader</A> <B>getTextReader</B>()</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getEncoding()"><!-- --></A><H3>
getEncoding</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getEncoding</B>()</PRE>
<DL>
<DD>Return input encoding if known or null if unknown.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the encoding of this instance or null</DL>
</DD>
</DL>
<HR>

<A NAME="hasText()"><!-- --></A><H3>
hasText</H3>
<PRE>
public boolean <B>hasText</B>()</PRE>
<DL>
<DD>Return true if the current event has text, false otherwise
 The following events have text:
 CHARACTERS,DTD ,ENTITY_REFERENCE, COMMENT
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getLocation()"><!-- --></A><H3>
getLocation</H3>
<PRE>
public <A HREF="../../../javax/xml/stream/Location.html">Location</A> <B>getLocation</B>()</PRE>
<DL>
<DD>Return the current location of the processor.
 If the Location is unknown the processor should return
 an implementation of Location that returns -1 for the
 location and null for the publicId and systemId
 The location information is only valid until next() is
 called.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getName()"><!-- --></A><H3>
getName</H3>
<PRE>
public <A HREF="http://java.sun.com/j2ee/1.4/docs/api/javax/xml/namespace/QName.html">QName</A> <B>getName</B>()</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getLocalName()"><!-- --></A><H3>
getLocalName</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getLocalName</B>()</PRE>
<DL>
<DD>Returns the (local) name of the current event.
 For START_ELEMENT or END_ELEMENT returns the (local) name of the current element.
 For ENTITY_REFERENCE it returns entity name.
 For PROCESSING_INSTRUCTION it returns the target.
 The current event must be START_ELEMENT or END_ELEMENT, 
 PROCESSING_INSTRUCTION, or ENTITY_REFERENCE, otherwise null is returned.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the localName or null if none is available</DL>
</DD>
</DL>
<HR>

<A NAME="hasName()"><!-- --></A><H3>
hasName</H3>
<PRE>
public boolean <B>hasName</B>()</PRE>
<DL>
<DD>returns true if the current event has a name, START_ELEMENT, END_ELEMENT,
 ENTITY_REFERENCE, and PROCESSING_INSTRUCTION have a name
 returns false otherwise
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getNamespaceURI()"><!-- --></A><H3>
getNamespaceURI</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getNamespaceURI</B>()</PRE>
<DL>
<DD>If the current event is a START_ELEMENT or END_ELEMENT  this method
 returns the URI of the prefix or the default namespace.
 Returns null if the event does not have a prefix.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the URI bound to this elements prefix, the default namespace, or null</DL>
</DD>
</DL>
<HR>

<A NAME="getPrefix()"><!-- --></A><H3>
getPrefix</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getPrefix</B>()</PRE>
<DL>
<DD>Returns the prefix of the current event or null if the event does not have a prefix
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the prefix or null</DL>
</DD>
</DL>
<HR>

<A NAME="getVersion()"><!-- --></A><H3>
getVersion</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getVersion</B>()</PRE>
<DL>
<DD>Get the xml version declared on the xml declaration
 Returns null if none was declared
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the XML version or null</DL>
</DD>
</DL>
<HR>

<A NAME="isStandalone()"><!-- --></A><H3>
isStandalone</H3>
<PRE>
public boolean <B>isStandalone</B>()</PRE>
<DL>
<DD>Get the standalone declaration from the xml declaration
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if this is standalone, or false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="standaloneSet()"><!-- --></A><H3>
standaloneSet</H3>
<PRE>
public boolean <B>standaloneSet</B>()</PRE>
<DL>
<DD>Checks if standalone was set in the document
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if standalone was set in the document, or false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="getCharacterEncodingScheme()"><!-- --></A><H3>
getCharacterEncodingScheme</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getCharacterEncodingScheme</B>()</PRE>
<DL>
<DD>Returns the character encoding declared on the xml declaration
 Returns null if none was declared
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the encoding declared in the document or null</DL>
</DD>
</DL>
<HR>

<A NAME="getPITarget()"><!-- --></A><H3>
getPITarget</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getPITarget</B>()</PRE>
<DL>
<DD>Get the target of a processing instruction
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the target or null</DL>
</DD>
</DL>
<HR>

<A NAME="getPIData()"><!-- --></A><H3>
getPIData</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A> <B>getPIData</B>()</PRE>
<DL>
<DD>Get the data section of a processing instruction
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the data or null</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../javax/xml/stream/XMLStreamConstants.html"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="XMLStreamReader.html" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->

<HR>

</BODY>
</HTML>
