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)