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)