By GokiSoft.com|
10:03 15/09/2021|
Java Advanced
[Share Code] Phân tích tài liệu XML bằng Java - Lập trình Java/XML
Phần 1:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<student>
<fullname>TRAN VAN A</fullname>
<rollno>R001</rollno>
<email>a@gmail.com</email>
<address>Ha Noi</address>
<gender>Nam</gender>
</student>
<student>
<fullname>TRAN VAN B</fullname>
<rollno>R002</rollno>
<email>b@gmail.com</email>
<address>Ha Noi</address>
<gender>Nam</gender>
</student>
<student>
<fullname>TRAN VAN C</fullname>
<rollno>R003</rollno>
<email>c@gmail.com</email>
<address>Ha Noi</address>
<gender>Nam</gender>
</student>
<student>
<fullname>TRAN VAN D</fullname>
<rollno>R004</rollno>
<email>d@gmail.com</email>
<address>Ha Nam</address>
<gender>Nam</gender>
</student>
</root>
#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> dataList;
Student currentStudent;
boolean isFullname = false;
boolean isGender = false;
boolean isAddress = false;
boolean isEmail = false;
boolean isRollno = false;
public StudentHandler() {
dataList = new ArrayList<>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
switch(qName.toLowerCase()) {
case "student":
currentStudent = new Student();
break;
case "fullname":
isFullname = true;
break;
case "email":
isEmail = true;
break;
case "gender":
isGender = true;
break;
case "address":
isAddress = true;
break;
case "rollno":
isRollno = true;
break;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
switch(qName.toLowerCase()) {
case "student":
dataList.add(currentStudent);
currentStudent = null;
break;
case "fullname":
isFullname = false;
break;
case "email":
isEmail = false;
break;
case "gender":
isGender = false;
break;
case "address":
isAddress = false;
break;
case "rollno":
isRollno = false;
break;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String content = new String(ch, start, length);
if(isFullname) {
currentStudent.setFullname(content);
} else if(isAddress) {
currentStudent.setAddress(content);
} else if(isEmail) {
currentStudent.setEmail(content);
} else if(isGender) {
currentStudent.setGender(content);
} else if(isRollno) {
currentStudent.setRollno(content);
}
}
public List<Student> getDataList() {
return dataList;
}
}
#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;
import java.util.Scanner;
/**
*
* @author Diep.Tran
*/
public class Student implements IXMLHandler{
String fullname, rollno, email, gender, address;
boolean isFullname = false;
boolean isGender = false;
boolean isAddress = false;
boolean isEmail = false;
boolean isRollno = false;
public Student() {
}
public Student(String fullname, String rollno, String email, String gender, String address) {
this.fullname = fullname;
this.rollno = rollno;
this.email = email;
this.gender = gender;
this.address = address;
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getRollno() {
return rollno;
}
public void setRollno(String rollno) {
this.rollno = rollno;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public void input() {
Scanner scan = new Scanner(System.in);
System.out.println("Nhap ten: ");
fullname = scan.nextLine();
System.out.println("Nhap MSV: ");
rollno = scan.nextLine();
System.out.println("Nhap email: ");
email = scan.nextLine();
System.out.println("Nhap gioi tinh: ");
gender = scan.nextLine();
System.out.println("Nhap dia chi: ");
address = scan.nextLine();
}
@Override
public String toString() {
return "Student{" + "fullname=" + fullname + ", rollno=" + rollno + ", email=" + email + ", gender=" + gender + ", address=" + address + '}';
}
public String getStudentXML() {
return " <student>\n" +
" <fullname>"+fullname+"</fullname>\n" +
" <rollno>"+rollno+"</rollno>\n" +
" <email>"+email+"</email>\n" +
" <address>"+address+"</address>\n" +
" <gender>"+gender+"</gender>\n" +
" </student>\n";
}
public static String getStudentFileXML(String data) {
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"\n" +
"<root>\n" + data +
"</root>";
}
@Override
public void startElement(String qName) {
switch(qName) {
case "fullname":
isFullname = true;
break;
case "email":
isEmail = true;
break;
case "gender":
isGender = true;
break;
case "address":
isAddress = true;
break;
case "rollno":
isRollno = true;
break;
}
}
@Override
public void endElement(String qName) {
switch(qName) {
case "fullname":
isFullname = false;
break;
case "email":
isEmail = false;
break;
case "gender":
isGender = false;
break;
case "address":
isAddress = false;
break;
case "rollno":
isRollno = false;
break;
}
}
@Override
public void characters(String value) {
if(isFullname) {
setFullname(value);
} else if(isAddress) {
setAddress(value);
} else if(isEmail) {
setEmail(value);
} else if(isGender) {
setGender(value);
} else if(isRollno) {
setRollno(value);
}
}
}
#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.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
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 {
static List<Student> dataList;
static Scanner scan;
public static void main(String[] args) {
dataList = new ArrayList<>();
scan = new Scanner(System.in);
int choose;
do {
showMenu();
choose = Integer.parseInt(scan.nextLine());
switch(choose) {
case 1:
System.out.println("Nhap thong tin sinh vien");
Student std = new Student();
std.input();
dataList.add(std);
break;
case 2:
for (Student student : dataList) {
System.out.println(student);
}
break;
case 3:
saveStudentXML();
break;
case 4:
readStudentXML();
break;
case 5:
System.out.println("Thoat!!!");
break;
default:
System.out.println("Nhap sai!!!");
break;
}
} while(choose != 5);
}
static void showMenu() {
System.out.println("1. Nhap");
System.out.println("2. Hien thi");
System.out.println("3. Luu students.xml");
System.out.println("4. Doc students.xml");
System.out.println("5. Thoat");
System.out.println("Chon: ");
}
static void saveStudentXML() {
FileOutputStream fos = null;
try {
fos = new FileOutputStream("students.xml");
String content = "";
for (Student student : dataList) {
content += student.getStudentXML();
}
content = Student.getStudentFileXML(content);
byte[] data = content.getBytes("utf8");
fos.write(data);
} catch (FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if(fos != null) {
try {
fos.close();
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
static void readStudentXML() {
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> list = handler.getDataList();
for (Student student : list) {
//System.out.println(student);
dataList.add(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);
}
}
}
Phần 2:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<class-info>
<name>C2010G</name>
<address>54 Le Thanh Nghi, Hai Ba Trung, Ha Noi</address>
</class-info>
<student-list>
<student>
<fullname>TRAN VAN A</fullname>
<rollno>R001</rollno>
<email>a@gmail.com</email>
<address>Ha Noi</address>
<gender>Nam</gender>
</student>
<student>
<fullname>TRAN VAN B</fullname>
<rollno>R002</rollno>
<email>b@gmail.com</email>
<address>Ha Noi</address>
<gender>Nam</gender>
</student>
<student>
<fullname>TRAN VAN C</fullname>
<rollno>R003</rollno>
<email>c@gmail.com</email>
<address>Ha Noi</address>
<gender>Nam</gender>
</student>
<student>
<fullname>TRAN VAN D</fullname>
<rollno>R004</rollno>
<email>d@gmail.com</email>
<address>Ha Nam</address>
<gender>Nam</gender>
</student>
</student-list>
</root>
#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.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("C2010G.xml");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
ClassHandler handler = new ClassHandler();
parser.parse(file, handler);
ClassGroup group = handler.getClassGroup();
System.out.println(group.info);
for (Student student : group.getStudentList()) {
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);
}
}
}
#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;
import java.util.Scanner;
/**
*
* @author Diep.Tran
*/
public class Student implements IXMLHandler{
String fullname, rollno, email, gender, address;
boolean isFullname = false;
boolean isGender = false;
boolean isAddress = false;
boolean isEmail = false;
boolean isRollno = false;
public Student() {
}
public Student(String fullname, String rollno, String email, String gender, String address) {
this.fullname = fullname;
this.rollno = rollno;
this.email = email;
this.gender = gender;
this.address = address;
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getRollno() {
return rollno;
}
public void setRollno(String rollno) {
this.rollno = rollno;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public void input() {
Scanner scan = new Scanner(System.in);
System.out.println("Nhap ten: ");
fullname = scan.nextLine();
System.out.println("Nhap MSV: ");
rollno = scan.nextLine();
System.out.println("Nhap email: ");
email = scan.nextLine();
System.out.println("Nhap gioi tinh: ");
gender = scan.nextLine();
System.out.println("Nhap dia chi: ");
address = scan.nextLine();
}
@Override
public String toString() {
return "Student{" + "fullname=" + fullname + ", rollno=" + rollno + ", email=" + email + ", gender=" + gender + ", address=" + address + '}';
}
public String getStudentXML() {
return " <student>\n" +
" <fullname>"+fullname+"</fullname>\n" +
" <rollno>"+rollno+"</rollno>\n" +
" <email>"+email+"</email>\n" +
" <address>"+address+"</address>\n" +
" <gender>"+gender+"</gender>\n" +
" </student>\n";
}
public static String getStudentFileXML(String data) {
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"\n" +
"<root>\n" + data +
"</root>";
}
@Override
public void startElement(String qName) {
switch(qName) {
case "fullname":
isFullname = true;
break;
case "email":
isEmail = true;
break;
case "gender":
isGender = true;
break;
case "address":
isAddress = true;
break;
case "rollno":
isRollno = true;
break;
}
}
@Override
public void endElement(String qName) {
switch(qName) {
case "fullname":
isFullname = false;
break;
case "email":
isEmail = false;
break;
case "gender":
isGender = false;
break;
case "address":
isAddress = false;
break;
case "rollno":
isRollno = false;
break;
}
}
@Override
public void characters(String value) {
if(isFullname) {
setFullname(value);
} else if(isAddress) {
setAddress(value);
} else if(isEmail) {
setEmail(value);
} else if(isGender) {
setGender(value);
} else if(isRollno) {
setRollno(value);
}
}
}
#IXMLHandler.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 IXMLHandler {
void startElement(String qName);
void endElement(String qName);
void characters(String value);
}
#ClassInfo.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 ClassInfo implements IXMLHandler{
String name, address;
boolean isName = false;
boolean isAddress = false;
public ClassInfo() {
}
public ClassInfo(String name, String address) {
this.name = name;
this.address = address;
}
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 "ClassInfo{" + "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) {
this.name = value;
} else if(isAddress) {
this.address = 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 org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @author Diep.Tran
*/
public class ClassHandler extends DefaultHandler{
ClassGroup classGroup = new ClassGroup();
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
classGroup.startElement(qName.toLowerCase());
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
classGroup.endElement(qName.toLowerCase());
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String value = new String(ch, start, length);
classGroup.characters(value);
}
public ClassGroup getClassGroup() {
return classGroup;
}
}
#ClassGroup.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 ClassGroup implements IXMLHandler {
ClassInfo info = null;
//Dung trong phan doc du lieu tu File XML.
Student currentStudent = null;
List<Student> studentList = new ArrayList<>();
boolean isInfo = false;
boolean isStudent = false;
public ClassGroup() {
}
public ClassInfo getInfo() {
return info;
}
public List<Student> getStudentList() {
return studentList;
}
@Override
public void startElement(String qName) {
switch (qName) {
case "class-info":
info = new ClassInfo();
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 "class-info":
isInfo = false;
break;
case "student":
studentList.add(currentStudent);
isStudent = false;
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);
}
}
}
Tags:
Phản hồi từ học viên
5
(Dựa trên đánh giá ngày hôm nay)