Java Programming: Complete the following code for the Object next() method which
ID: 3839355 • Letter: J
Question
Java Programming:
Complete the following code for the Object next() method which should return the next element or textual element (String) in the XML file. Use the XML tokenizer provided.
Should throw XMLParseException if a problem is found by the tokenizer or if attributes are duplicated or if an ending tag does not match the start tag.
import java.io.Reader;
public class XMLReader {
private XMLTokenizer _tokenizer;
public XMLReader(Reader r) {
_tokenizer = new XMLTokenizer(r);
}
public Object next() throws XMLParseException {
throw new XMLParseException("internal error: " + _tokenizer);
}
}
Explanation / Answer
Hi,
Please see the classe below:
XMLTokenizer.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.StringTokenizer;
public class XMLTokenizer {
private static String[] xmlLine ;
public XMLTokenizer(Reader r){
xmlLine = new String[1000];
readFromFile(r);
}
/**
* Reading the component measures from file
* @param filename
*/
public static void readFromFile(Reader r){
BufferedReader br = null;
int counter =0;
try {
br = new BufferedReader(r);
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
xmlLine[counter] = sCurrentLine;
counter++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
public String[] getXmlLine() {
return xmlLine;
}
public void setXmlLine(String[] xmlLine) {
this.xmlLine = xmlLine;
}
}
XMLReader.java
import javax.management.modelmbean.XMLParseException;
import java.io.Reader;
public class XMLReader {
private XMLTokenizer _tokenizer;
private int counter =0;
public XMLReader(Reader r) {
_tokenizer = new XMLTokenizer(r);
}
/**
* To get the next token
* @return
* @throws XMLParseException
*/
public Object next() throws XMLParseException {
String tag = "";
String val = "";
String xml = _tokenizer.getXmlLine()[counter] ;
if(null!= xml && !"".equalsIgnoreCase(xml)){
//Getting the start tag indices
int startTagOpen = xml.indexOf('<');
int startTagClose = xml.indexOf('>');
if(startTagOpen == 0){
for(int i=1;i<startTagClose;i++){
tag =tag + xml.charAt(i);
}
}
else{
throw new XMLParseException("internal error: " + _tokenizer);
}
//Creating the EndTag.
String endTag = "</"+tag+">";
if(xml.contains(endTag)){
int lastIndex = xml.lastIndexOf(endTag);
if(lastIndex > 0){
for(int i=startTagClose+1;i<lastIndex;i++){
val =val + xml.charAt(i);
}
}
else{
throw new XMLParseException("internal error: " + _tokenizer);
}
}
else{
throw new XMLParseException("internal error: " + _tokenizer);
}
counter ++;
}
return val;
}
}
Test.java
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.management.modelmbean.XMLParseException;
public class Test {
public static void main(String[] args){
//Creating XMLReader class object
try {
XMLReader reader = new XMLReader(new FileReader("somexml.xml"));
String next = (String) reader.next();
while(null!=next&& !"".equalsIgnoreCase(next)){
System.out.println(next);
next = (String) reader.next();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XMLParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
somexml.xml'
<name>Helen</name>
<age>32</age>
<job>Teacher</job>
Sample output:
Helen
32
Teacher
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.