/*
Code revised from
Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002
*/
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
public class MappingContentHandler {
static public void main(String[] arg) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
XMLReader reader = parser.getXMLReader();
reader.setErrorHandler(new MyErrorHandler());
MyTextHandler duper = new MyTextHandler();
reader.setContentHandler(duper);
InputSource is = new InputSource("person.xml");
reader.parse(is);
} catch (SAXException e) {
System.out.println(e);
} catch (ParserConfigurationException e) {
System.err.println(e);
System.exit(1);
} catch (IOException e) {
System.err.println(e);
System.exit(1);
}
}
}
class MyErrorHandler implements ErrorHandler {
public void warning(SAXParseException e) throws SAXException {
show("Warning", e);
throw (e);
}
public void error(SAXParseException e) throws SAXException {
show("Error", e);
throw (e);
}
public void fatalError(SAXParseException e) throws SAXException {
show("Fatal Error", e);
throw (e);
}
private void show(String type, SAXParseException e) {
System.out.println(type + ": " + e.getMessage());
System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
System.out.println("System ID: " + e.getSystemId());
}
}
class MyTextHandler implements ContentHandler {
private boolean insideNameElement = false;
private boolean insidePhoneElement = false;
private boolean insideEmailElement = false;
private Person person;
private Vector<Person> personVec;
public MyTextHandler() {
personVec = new Vector<Person>();
}
public void setDocumentLocator(Locator locator) {
}
public void startDocument() {
}
public void endDocument() {
for(int i=0; i<personVec.size(); i++) {
Person p = (Person)personVec.elementAt(i);
System.out.println(p.getName()+" "+p.getPhone()+" "+p.getEmail());
}
}
public void startPrefixMapping(String prefix,String uri) { }
public void endPrefixMapping(String prefix) { }
public void startElement(String namespaceURI,String localName,
String qName,Attributes atts) {
if(qName.equals("person")) {
person = new Person();
} else if(qName.equals("name")) {
insideNameElement = true;
} else if(qName.equals("phone")) {
insidePhoneElement = true;
} else if(qName.equals("email")) {
insideEmailElement = true;
}
}
public void endElement(String namespaceURI,String localName,
String qName) {
if(qName.equals("person")) {
if(person != null){
personVec.addElement(person);
}
} else if(qName.equals("name")) {
insideNameElement = false;
} else if(qName.equals("phone")) {
insidePhoneElement = false;
} else if(qName.equals("email")) {
insideEmailElement = false;
}
}
public void characters(char[] ch,int start,int length) {
String str = "";
for(int i=start; i<start + length; i++)
str += ch[i];
if(insideNameElement)
person.setName(str);
else if(insidePhoneElement)
person.setPhone(str);
else if(insideEmailElement)
person.setEmail(str);
}
public void ignorableWhitespace(char[] ch,int start,int length) { }
public void processingInstruction(String target,String data) { }
public void skippedEntity(String name) { }
}
class Person {
private String name = null;
private String phone = null;
private String email = null;
public void setName(String value) {
name = value;
}
public void setPhone(String value) {
phone = value;
}
public void setEmail(String value) {
email = value;
}
public String getName() {
if(name == null)
return("none");
return(name);
}
public String getPhone() {
if(phone == null)
return("none");
return(phone);
}
public String getEmail() {
if(email == null)
return("none");
return(email);
}
}
//File: person.xml
<?xml version="1.0" standalone="yes"?>
<folks>
<person>
<phone>999 555-8888</phone>
<email>e@yoursite.net</email>
<name>R, L</name>
</person>
<person>
<phone>333 555-9910</phone>
<name>V, R</name>
<email>rv@yoursite.com</email>
</person>
<person>
<name>B, D.</name>
<email>b@xyz.net</email>
</person>
<person>
<phone>502 555-2192</phone>
<name>B, M</name>
</person>
</folks>
R, L 999 555-8888 e@yoursite.net
V, R 333 555-9910 rv@yoursite.com
B, D. none b@xyz.net
B, M 502 555-2192 none