Listing 3: XMLParser.java
import javax.xml.stream.*;
import javax.xml.stream.events.*;
import javax.xml.stream.XMLInputFactory;
import java.io.*;

public class XMLParser{

public void parseXMLDocument(){
try{
XMLInputFactory inputFactory=XMLInputFactory.newInstance();
InputStream input=new FileInputStream(new 

File("C:/STAX/catalog.xml"));
XMLStreamReader  xmlStreamReader 

=inputFactory.createXMLStreamReader(input);

while(xmlStreamReader.hasNext()){
int event=xmlStreamReader.next();

if(event==XMLStreamConstants.START_DOCUMENT){
System.out.println("Event Type:START_DOCUMENT");
System.out.println("Document 

Encoding:"+xmlStreamReader.getEncoding());
System.out.println("XML 

Version:"+xmlStreamReader.getVersion());
}
if(event==XMLStreamConstants.START_ELEMENT){
System.out.println("Event Type: START_ELEMENT");

System.out.println("Element 

Prefix:"+xmlStreamReader.getPrefix());
System.out.println("Element Local 

Name:"+xmlStreamReader.getLocalName());
System.out.println("Namespace URI:"+xmlStreamReader.getNamespaceURI());

for(int i=0; i<xmlStreamReader.getAttributeCount();i++){

System.out.println("Attribute 

Prefix:"+xmlStreamReader.getAttributePrefix(i));
System.out.println("Attribute 

Namespace:"+xmlStreamReader.getAttributeNamespace(i));
System.out.println("Attribute Local 

Name:"+xmlStreamReader.getAttributeLocalName(i));
System.out.println("Attribute 

Value:"+xmlStreamReader.getAttributeValue(i));
}

}
if(event==XMLStreamConstants.ATTRIBUTE){
System.out.println("Event Type:ATTRIBUTE");
}

if(event==XMLStreamConstants.CHARACTERS){
System.out.println("Event Type: CHARACTERS");
System.out.println("Text:"+xmlStreamReader.getText());
}
if(event==XMLStreamConstants.COMMENT){
System.out.println("Event Type:COMMENT");
System.out.println("Comment 

Text:"+xmlStreamReader.getText());
}

if(event==XMLStreamConstants.END_DOCUMENT){
System.out.println("Event Type:END_DOCUMENT");
}
if(event==XMLStreamConstants.END_ELEMENT){
System.out.println("Event Type: END_ELEMENT");
}

if(event==XMLStreamConstants.NAMESPACE){
System.out.println("Event Type:NAMESPACE");
}

if(event==XMLStreamConstants.PROCESSING_INSTRUCTION){
System.out.println("Event Type: PROCESSING_INSTRUCTION");

System.out.println("PI 

Target:"+xmlStreamReader.getPITarget());
System.out.println("PI Data:"+xmlStreamReader.getPIData());
}
if(event==XMLStreamConstants.SPACE){
System.out.println("Event Type: SPACE");
System.out.println("Text:"+xmlStreamReader.getText());

}
}
}catch(FactoryConfigurationError 

e){System.out.println("FactoryConfigurationError"+e.getMessa

ge());}
catch(XMLStreamException 

e){System.out.println("XMLStreamException"+e.getMessage());}
catch(IOException 

e){System.out.println("IOException"+e.getMessage());}

}
public static void main(String[] argv){

XMLParser xmlParser=new XMLParser();
xmlParser.parseXMLDocument();

}
}

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.