By GokiSoft.com|
19:50 18/09/2021|
Java Advanced
[Share Code] Phân tích tài liệu XML bằng Java - Lập trình Java/XML - C2010L
#students.xml
<?xml version="1.0" encoding="UTF-8"?>
<student-list>
<student>
<fullname title="12312312">TRAN VAN A</fullname>
<gender>Nam</gender>
<email>tranvana@gmail.com</email>
<phone-number>1231231313</phone-number>
<address>Ha Noi</address>
</student>
<student>
<fullname title="12312312">TRAN VAN B</fullname>
<gender>Nam</gender>
<email>tranvanb@gmail.com</email>
<phone-number>5345354534</phone-number>
<address>Ha Noi</address>
</student>
<student>
<fullname title="12312312">TRAN VAN C</fullname>
<gender>Nam</gender>
<email>tranvanc@gmail.com</email>
<phone-number>4456456456</phone-number>
<address>Ha Noi</address>
</student>
</student-list>
#class-list.xml
<?xml version="1.0" encoding="UTF-8"?>
<class-list>
<class>
<info>
<name>C2010L</name>
<address>54 Le Thanh Nghi</address>
</info>
<student-list>
<student>
<fullname title="12312312">TRAN VAN A</fullname>
<gender>Nam</gender>
<email>tranvana@gmail.com</email>
<phone-number>1231231313</phone-number>
<address>Ha Noi</address>
</student>
<student>
<fullname title="12312312">TRAN VAN B</fullname>
<gender>Nam</gender>
<email>tranvanb@gmail.com</email>
<phone-number>5345354534</phone-number>
<address>Ha Noi</address>
</student>
<student>
<fullname title="12312312">TRAN VAN C</fullname>
<gender>Nam</gender>
<email>tranvanc@gmail.com</email>
<phone-number>4456456456</phone-number>
<address>Ha Noi</address>
</student>
</student-list>
</class>
<class>
<info>
<name>C2010G</name>
<address>54 Le Thanh Nghi</address>
</info>
<student-list>
<student>
<fullname title="12312312">TRAN VAN A</fullname>
<gender>Nam</gender>
<email>tranvana@gmail.com</email>
<phone-number>1231231313</phone-number>
<address>Ha Noi</address>
</student>
<student>
<fullname title="12312312">TRAN VAN B</fullname>
<gender>Nam</gender>
<email>tranvanb@gmail.com</email>
<phone-number>5345354534</phone-number>
<address>Ha Noi</address>
</student>
<student>
<fullname title="12312312">TRAN VAN C</fullname>
<gender>Nam</gender>
<email>tranvanc@gmail.com</email>
<phone-number>4456456456</phone-number>
<address>Ha Noi</address>
</student>
</student-list>
</class>
</class-list>
Phần 1:
#Main.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xml.lesson01;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
/**
*
* @author Diep.Tran
*/
public class Main {
public static void main(String[] args) {
try {
File file = new File("students.xml");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
StudentHandler handler = new StudentHandler();
parser.parse(file, handler);
List<Student> studentList = handler.getStudentList();
for (Student student : studentList) {
System.out.println(student);
}
} catch (ParserConfigurationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (SAXException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
#StudentHandler.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xml.lesson01;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @author Diep.Tran
*/
public class StudentHandler extends DefaultHandler{
List<Student> studentList;
Student currentStudent;
boolean isFullname = false;
boolean isEmail = false;
boolean isAddress = false;
boolean isGender = false;
boolean isPhoneNumber = false;
public StudentHandler() {
studentList = new ArrayList<>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
qName = qName.toLowerCase();
switch(qName) {
case "student":
currentStudent = new Student();
break;
case "fullname":
isFullname = true;
break;
case "email":
isEmail = true;
break;
case "address":
isAddress = true;
break;
case "phone-number":
isPhoneNumber = true;
break;
case "gender":
isGender = true;
break;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
qName = qName.toLowerCase();
switch(qName) {
case "student":
studentList.add(currentStudent);
currentStudent = null;
break;
case "fullname":
isFullname = false;
break;
case "email":
isEmail = false;
break;
case "address":
isAddress = false;
break;
case "phone-number":
isPhoneNumber = false;
break;
case "gender":
isGender = false;
break;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String value = new String(ch, start, length);
if(isFullname) {
currentStudent.setFullname(value);
} else if(isGender) {
currentStudent.setGender(value);
} else if(isAddress) {
currentStudent.setAddress(value);
} else if(isPhoneNumber) {
currentStudent.setPhoneNumber(value);
} else if(isEmail) {
currentStudent.setEmail(value);
}
}
public List<Student> getStudentList() {
return studentList;
}
}
#Student.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xml.lesson01;
/**
*
* @author Diep.Tran
*/
public class Student implements IHandler{
String fullname, gender, email, address, phoneNumber;
boolean isFullname = false;
boolean isEmail = false;
boolean isAddress = false;
boolean isGender = false;
boolean isPhoneNumber = false;
public Student() {
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public String toString() {
return "Student{" + "fullname=" + fullname + ", gender=" + gender + ", email=" + email + ", address=" + address + ", phoneNumber=" + phoneNumber + '}';
}
@Override
public void startElement(String qName) {
switch(qName) {
case "fullname":
isFullname = true;
break;
case "email":
isEmail = true;
break;
case "address":
isAddress = true;
break;
case "phone-number":
isPhoneNumber = true;
break;
case "gender":
isGender = true;
break;
}
}
@Override
public void endElement(String qName) {
switch(qName) {
case "fullname":
isFullname = false;
break;
case "email":
isEmail = false;
break;
case "address":
isAddress = false;
break;
case "phone-number":
isPhoneNumber = false;
break;
case "gender":
isGender = false;
break;
}
}
@Override
public void characters(String value) {
if(isFullname) {
setFullname(value);
} else if(isGender) {
setGender(value);
} else if(isAddress) {
setAddress(value);
} else if(isPhoneNumber) {
setPhoneNumber(value);
} else if(isEmail) {
setEmail(value);
}
}
}
Phần 2:
#AptechClass.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xml.lesson01;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Diep.Tran
*/
public class AptechClass implements IHandler{
Info info;
List<Student> studentList;
Student currentStudent = null;
boolean isInfo = false;
boolean isStudent = false;
public AptechClass() {
info = new Info();
studentList = new ArrayList<>();
}
public void display() {
System.out.println("Thong tin lop hoc: ");
System.out.println(info);
System.out.println("Danh sach sinh vien: ");
for (Student student : studentList) {
System.out.println(student);
}
}
@Override
public void startElement(String qName) {
switch(qName) {
case "info":
isInfo = true;
break;
case "student":
currentStudent = new Student();
isStudent = true;
break;
default:
if(isInfo) {
info.startElement(qName);
} else if(isStudent) {
currentStudent.startElement(qName);
}
break;
}
}
@Override
public void endElement(String qName) {
switch(qName) {
case "info":
isInfo = false;
break;
case "student":
isStudent = false;
studentList.add(currentStudent);
currentStudent = null;
break;
default:
if(isInfo) {
info.endElement(qName);
} else if(isStudent) {
currentStudent.endElement(qName);
}
break;
}
}
@Override
public void characters(String value) {
if(isInfo) {
info.characters(value);
} else if(isStudent) {
currentStudent.characters(value);
}
}
}
#ClassHandler.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xml.lesson01;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @author Diep.Tran
*/
public class ClassHandler extends DefaultHandler{
List<AptechClass> classList = new ArrayList<>();
AptechClass currentClass = null;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
qName = qName.toLowerCase();
switch(qName) {
case "class":
currentClass = new AptechClass();
break;
default:
if(currentClass != null) {
currentClass.startElement(qName);
}
break;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
switch(qName) {
case "class":
classList.add(currentClass);
currentClass = null;
break;
default:
if(currentClass != null) {
currentClass.endElement(qName);
}
break;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String value = new String(ch, start, length);
if(currentClass != null) {
currentClass.characters(value);
}
}
}
#IHandler.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xml.lesson01;
/**
*
* @author Diep.Tran
*/
public interface IHandler {
void startElement(String qName);
void endElement(String qName);
void characters(String value);
}
#Info.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xml.lesson01;
/**
*
* @author Diep.Tran
*/
public class Info implements IHandler{
String name, address;
boolean isName = false;
boolean isAddress = false;
public Info() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Info{" + "name=" + name + ", address=" + address + '}';
}
@Override
public void startElement(String qName) {
switch(qName) {
case "name":
isName = true;
break;
case "address":
isAddress = true;
break;
}
}
@Override
public void endElement(String qName) {
switch(qName) {
case "name":
isName = false;
break;
case "address":
isAddress = false;
break;
}
}
@Override
public void characters(String value) {
if(isName) {
name = value;
} else if(isAddress) {
address = value;
}
}
}
#Student.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xml.lesson01;
/**
*
* @author Diep.Tran
*/
public class Student implements IHandler{
String fullname, gender, email, address, phoneNumber;
boolean isFullname = false;
boolean isEmail = false;
boolean isAddress = false;
boolean isGender = false;
boolean isPhoneNumber = false;
public Student() {
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public String toString() {
return "Student{" + "fullname=" + fullname + ", gender=" + gender + ", email=" + email + ", address=" + address + ", phoneNumber=" + phoneNumber + '}';
}
@Override
public void startElement(String qName) {
switch(qName) {
case "fullname":
isFullname = true;
break;
case "email":
isEmail = true;
break;
case "address":
isAddress = true;
break;
case "phone-number":
isPhoneNumber = true;
break;
case "gender":
isGender = true;
break;
}
}
@Override
public void endElement(String qName) {
switch(qName) {
case "fullname":
isFullname = false;
break;
case "email":
isEmail = false;
break;
case "address":
isAddress = false;
break;
case "phone-number":
isPhoneNumber = false;
break;
case "gender":
isGender = false;
break;
}
}
@Override
public void characters(String value) {
if(isFullname) {
setFullname(value);
} else if(isGender) {
setGender(value);
} else if(isAddress) {
setAddress(value);
} else if(isPhoneNumber) {
setPhoneNumber(value);
} else if(isEmail) {
setEmail(value);
}
}
}
#Test.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xml.lesson01;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
/**
*
* @author Diep.Tran
*/
public class Test {
public static void main(String[] args) {
try {
File file = new File("class-list.xml");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
ClassHandler handler = new ClassHandler();
parser.parse(file, handler);
List<AptechClass> classList = handler.classList;
for (AptechClass aptechClass : classList) {
aptechClass.display();
}
} catch (ParserConfigurationException | SAXException | IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Tags:
Phản hồi từ học viên
5
(Dựa trên đánh giá ngày hôm nay)