S
salimk786
Hello,
I need help validating an xml file against an external DTD. The below
code allows me to read the xml file and gather specific elements of
interest.
If the xml looked like this, How would i validate it ?
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<simpsons type='bank' platform='TV' app-version='1.0.0'>
<header>
<id>845314490</id>
<title>IN_SF_EN_MA_G2_CA_2009_00</title>
</header>
<font-table>
<font-entry number='1'>
<charset>ansi</charset>
<name>Arial</name>
<pitch>default</pitch>
</font-entry>
<font-entry number='2'>
<charset>ansi</charset>
<name>Times New Roman</name>
<pitch>variable</pitch>
<family>roman</family>
</font-entry>
</font-table>
....
</simpsons>
Thanks.
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ParseXml extends DefaultHandler{
private SAXParserFactory spf;
private Examview tempExamviewObj; //to maintain context
private List myExamviewArrayList;
private String tempVal;
private String filename;
public ParseXml(){
this.myExamviewArrayList = new ArrayList();
}
public Iterator getExamviewIterator(){
return myExamviewArrayList.iterator();
}
public void parse(String filename) {
this.filename = filename;
parseDocument(filename);
}
private void parseDocument(String filename) {
//get a factory
this.spf = SAXParserFactory.newInstance();
try {
//get a new instance of parser
SAXParser sp = this.spf.newSAXParser();
//parse the file and also register this class for call backs
sp.parse(filename, this);
}catch(SAXException se) {
se.printStackTrace();
}catch(ParserConfigurationException pce) {
pce.printStackTrace();
}catch (IOException ie) {
ie.printStackTrace();
}
}
//Event Handlers
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//reset
tempVal = "";
if(qName.equalsIgnoreCase("examview")) {
//create a new instance of Examview
tempExamviewObj = new Examview();
tempExamviewObj.setPlatform(attributes.getValue("platform"));
tempExamviewObj.setAppVersion(attributes.getValue("app-version"));
}
}
public void characters(char[] ch, int start, int length) throws
SAXException {
tempVal = new String(ch,start,length);
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(qName.equalsIgnoreCase("Examview")) {
tempExamviewObj.setFileName(this.filename);
//add it to the list
myExamviewArrayList.add(tempExamviewObj);
}else if (qName.equalsIgnoreCase("id")) {
tempExamviewObj.setId(tempVal);
}else if (qName.equalsIgnoreCase("title")) {
tempExamviewObj.setTitle(tempVal);
}else if (qName.equalsIgnoreCase("topic")) {
//System.out.println("Topic:" + tempVal.trim());
tempExamviewObj.addTopic(tempVal);
}else if (qName.equalsIgnoreCase("question")) {
tempExamviewObj.updateQuestionCount();
}
}
}
I need help validating an xml file against an external DTD. The below
code allows me to read the xml file and gather specific elements of
interest.
If the xml looked like this, How would i validate it ?
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<simpsons type='bank' platform='TV' app-version='1.0.0'>
<header>
<id>845314490</id>
<title>IN_SF_EN_MA_G2_CA_2009_00</title>
</header>
<font-table>
<font-entry number='1'>
<charset>ansi</charset>
<name>Arial</name>
<pitch>default</pitch>
</font-entry>
<font-entry number='2'>
<charset>ansi</charset>
<name>Times New Roman</name>
<pitch>variable</pitch>
<family>roman</family>
</font-entry>
</font-table>
....
</simpsons>
Thanks.
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ParseXml extends DefaultHandler{
private SAXParserFactory spf;
private Examview tempExamviewObj; //to maintain context
private List myExamviewArrayList;
private String tempVal;
private String filename;
public ParseXml(){
this.myExamviewArrayList = new ArrayList();
}
public Iterator getExamviewIterator(){
return myExamviewArrayList.iterator();
}
public void parse(String filename) {
this.filename = filename;
parseDocument(filename);
}
private void parseDocument(String filename) {
//get a factory
this.spf = SAXParserFactory.newInstance();
try {
//get a new instance of parser
SAXParser sp = this.spf.newSAXParser();
//parse the file and also register this class for call backs
sp.parse(filename, this);
}catch(SAXException se) {
se.printStackTrace();
}catch(ParserConfigurationException pce) {
pce.printStackTrace();
}catch (IOException ie) {
ie.printStackTrace();
}
}
//Event Handlers
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//reset
tempVal = "";
if(qName.equalsIgnoreCase("examview")) {
//create a new instance of Examview
tempExamviewObj = new Examview();
tempExamviewObj.setPlatform(attributes.getValue("platform"));
tempExamviewObj.setAppVersion(attributes.getValue("app-version"));
}
}
public void characters(char[] ch, int start, int length) throws
SAXException {
tempVal = new String(ch,start,length);
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(qName.equalsIgnoreCase("Examview")) {
tempExamviewObj.setFileName(this.filename);
//add it to the list
myExamviewArrayList.add(tempExamviewObj);
}else if (qName.equalsIgnoreCase("id")) {
tempExamviewObj.setId(tempVal);
}else if (qName.equalsIgnoreCase("title")) {
tempExamviewObj.setTitle(tempVal);
}else if (qName.equalsIgnoreCase("topic")) {
//System.out.println("Topic:" + tempVal.trim());
tempExamviewObj.addTopic(tempVal);
}else if (qName.equalsIgnoreCase("question")) {
tempExamviewObj.updateQuestionCount();
}
}
}