org.apache.xerces.parsers.SAXParser);
3. XMLReader , 1 :
setContentHandler(), setErrorHandler(),
setDTDHandler(), setEntityResolver().
4. parse(), (URI) InputSource.
XML-.
/* # 1: XML-: SimpleHandler.java */
package chapt16.analyzer.sax;import org.xml.sax.ContentHandler;
import org.xml.sax.Attributes;
public class SimpleHandler implements ContentHandler {
public void startElement(String uri, String localName,
String qName, Attributes attrs) {
String s = qName;
//
for (int i = 0; i < attrs.getLength(); i++) {
s += " " + attrs.getQName(i) + "="
+ attrs.getValue(i) + " ";
}
System. out. print(s.trim());
}
public void characters(char [] ch,
int start, int length) {
System.out.print(new String(ch, start, length));
}
public void endElement(String uri,
String localName, String qName) {
System. out. print(qName);
}
}
/* # 2: : SAXSimple.java*/
package chapt16.main;
Import org.xml.sax.XMLReader;
Import org.xml.sax.XMLReaderFactory;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import chapt16.analyzer.sax.SimpleHandler;
public class SAXSimple {
public static void main(String[] args) {
try {
// SAX-
XMLReader reader = XMLReaderFactory.createXMLReader();
SimpleHandler contentHandler = new SimpleHandler();
reader.setContentHandler(contentHandler);
reader.parse("students.xml");
} catch (SAXException e) {
e.printStackTrace();
System. out. print(" SAX ");
} catch (ParserConfigurationException e) {
e.printStackTrace();
System. out. print(" ");
} catch (IOException e) {
e.printStackTrace();
System. out. print(" I/ ");
}
}
}
( XML- DTD):
Students
student login=mit faculty=mmf
Name Mitar Alex name
Telephone 2456474 telephone
Address
Country Belarus country
City Minsk city
Street Kalinovsky 45 street
Address
Student
student login=pus faculty=mmf
Name Pashkun Alex name
Telephone 3453789 telephone
Address
Country Belarus country
City Brest city
Street Knorina 56 street
Address
Student
Students
students.xml Student.
|
|
package chapt16.analyzer.sax;
enum StudentEnum {
NAME, TELEPHONE, STREET, CITY, COUNTRY
}
package chapt16.analyzer.sax;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import java.util.ArrayList;
import chapt16.entity.Student;
public class StundentHandler implements ContentHandler {
ArrayList<Student> students = new ArrayList<Student>();
Student curr = null;
StudentEnum currentEnum = null;
public ArrayList<Student> getStudents() {
return students;
}
public void startDocument() {
System.out.println("parsing started");
}
public void startElement(String uri, String localName,
String qName, Attributes attrs) {
if (qName.equals("student")) {
curr = new Student();
curr.setLogin(attrs.getValue(0));
curr.setFaculty(attrs.getValue(1));
}
if (!"address".equals(qName) &&
!"student".equals(qName) &&
!qName.equals("students"))
currentEnum =
StudentEnum.valueOf(qName.toUpperCase());
}
public void endElement(String uri, String localName,
String qName) {
if (qName.equals("student"))
students.add(curr);
currentEnum = null;
}
public void characters(char [] ch, int start,
int length) {
String s = new String(ch, start, length).trim();
if (currentEnum == null) return;
switch (currentEnum) {
case NAME:
curr.setName(s);
break;
case TELEPHONE:
curr.setTelephone(s);
break;
case STREET:
curr.getAddress().setStreet(s);
break;
case CITY:
curr.getAddress().setCity(s);
break;
case COUNTRY:
curr.getAddress().setCountry(s);
break;
}
}
}
/* # 4: : SAXStudentMain.java */package chapt16.main;