Thursday, June 29, 2006

Friday, June 23, 2006

Outskirts of Dubai, UAE

Streaming API for XML (STAX)

JSR 173: Streaming API for XML:
The Streaming API for XML (StAX) parsing will specify a Java-based, pull-parsing API for XML. The streaming API gives parsing control to the programmer by exposing a simple iterator based API. This allows the programmer to ask for the next event (pull the event) and allows state to be stored in a procedural fashion. The following example reads an XML document and modifies it by inserting a new tag at a specific location.

package com.myco.stax;
import java.io.FileInputStream;
import javax.xml.stream.*;
import javax.xml.stream.events.*;
import javax.xml.namespace.QName;

public class StAX_Iterator {

public static void main(String args[]) throws Exception {

System.out.println("Starting parser..");
//Read input XML
XMLEventReader eventReader = XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream("C:/STAX/xmlpull/RawBidSet.xml"));

//Configure output stream.
XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLEventFactory eventFac = XMLEventFactory.newInstance();
XMLEventWriter ew = factory.createXMLEventWriter(new java.io.FileOutputStream("C:/STAX/xmlpull/rbs-modified.xml"),"UTF-8");


while(eventReader.hasNext()) {
XMLEvent event = eventReader.next();
if(event != null){
//Pipe everything other than comments into the outputstream
if(! (event instanceof com.bea.xml.stream.events.CommentEvent)){
ew.add(event);
}
}

//Insert a new tag called mrid after the <name> tag inside every <GeneratingBid> or <LoadBid> or <InterTieBid> tag
if (event instanceof StartElement && ( ((StartElement)event).getName().getLocalPart().equals("GeneratingBid") ((StartElement)event).getName().getLocalPart().equals("LoadBid") ((StartElement)event).getName().getLocalPart().equals("InterTieBid") ) ) {

while(eventReader.hasNext()){
event = eventReader.next();
if(!(event instanceof com.bea.xml.stream.events.CommentEvent)){
ew.add(event);
}
if (event instanceof EndElement && (((EndElement)event).getName().getLocalPart().equals("name"))) {
ew.add(eventFac.createStartElement("",null,"mrid"));
ew.add(eventFac.createCharacters("QWE123"));
ew.add(eventFac.createEndElement("",null,"mrid"));
break;
}
}
}
}

ew.close();
System.out.println("Done.");

} //end main

} //end class