Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import org.xml.sax.SAXException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; public class Main { @SuppressWarnings("CatchAndPrintStackTrace") public static void main(String[] args){ SAXParserFactory spf = SAXParserFactory.newInstance(); try { InputStream xmlInput = new FileInputStream("student.xml"); SAXParser saxParser = spf.newSAXParser(); StudentXMLParser sxp = new StudentXMLParser(); saxParser.parse(xmlInput, sxp); System.out.println("\n*** Read Students ***"); for (Student s : sxp.getStudents()) System.out.println(s); } catch(SAXException|ParserConfigurationException|IOException e){ e.printStackTrace(); } } } |
Student.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Student { private int id; private String name; private String address; public Student(int id, String name, String address){ this.id = id; this.name = name; this.address = address; } @Override public String toString(){ return name + " (" + id + ") lives at " + address; } } |
StudentXMLParser.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import java.util.ArrayList; import java.util.List; public class StudentXMLParser extends DefaultHandler { private List<Student> students; private String buffer; private int studentId; private String studentName; private String studentAddress; @Override public void startDocument() throws SAXException { System.out.println("Start document"); students = new ArrayList<>(); } @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { System.out.println("Start element: " + qName); if(qName.equals("student")){ studentId = Integer.parseInt(atts.getValue("id")); System.out.println("id " + atts.getValue("id")); } } @Override public void endElement(String namespaceURI, String localName, String qName) throws SAXException { System.out.println("End element: " + qName); if (qName.equals("address")) studentAddress = buffer; if (qName.equals("name")) studentName = buffer; if (qName.equals("student")){ students.add(new Student(studentId, studentName, studentAddress)); studentId = -1; studentName = ""; studentAddress = ""; } } @Override public void endDocument() throws SAXException { System.out.println("End document"); } @Override public void characters(char ch[], int start, int length) throws SAXException { buffer = new String(ch, start, length); System.out.println("Chars: " + buffer); } public List<Student> getStudents(){ return students; } } |
student.xml
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="UTF-8"?> <students> <student id="800"> <name>Sherlock Holmes</name> <address>221B Baker Street</address> </student> <student id="801"> <name>John Watson</name> <address>221B Baker Street</address> </student> </students> |