1. 程式人生 > >xml 將解析的檔案裡的值賦給物件,將物件存入集合

xml 將解析的檔案裡的值賦給物件,將物件存入集合

在dom解析的基礎上加了很多if語句,不是最優解法.

public class Dom4jaddList {


    @Test
    public void DompareXml() throws Exception {
        File file = new File("src/com/youv/xml/test/students.xml");     
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();      
        DocumentBuilder builder =
dbf.newDocumentBuilder(); DOMReader reader = new DOMReader(); Document doc = reader.read(builder.parse(file)); // 獲取根節點的元素物件 Element node = doc.getRootElement(); List<Student> liststu = new ArrayList<Student>(); // 建立物件 Student student =
new Student(); // 在遍歷的過程中將元素存入物件中,再存入集合中 listnode(node,student,liststu); // 遍歷集合 iter(liststu); } @SuppressWarnings("unchecked") public void listnode(Element node,Student student,List<Student> liststu) { // 獲取根元素的名字 // System.out.println("根元素名字是"+node.getName());
// 獲取元素的屬性資訊 List<Attribute> list = node.attributes(); for (Attribute attribute : list) { String id=attribute.getText(); student.setId(id); System.out.println(id); } // 獲取文字 if (!(node.getTextTrim().equals(""))) { // 獲取文字資料 String str = node.getName(); String data = (String) node.getData(); if (str.equals("name")) { student.setName(data); } if (str.equals("sex")) { student.setSex(data); } if (str.equals("age")) { //xml檔案的資料是有順序的,age是一個student標籤的最後一個子標籤.所以在這裡存入集合 int age = Integer.parseInt(data); student.setAge(age); liststu.add(student); } } Iterator<Element> it = node.elementIterator(); while (it.hasNext()) { Element element = it.next(); //在這裡進行判斷,因為是遞迴操作,所以每次迭代都需要將完成一部分的資料重新放入自己的方法 //中.element,student,liststu,需要判斷什麼時候需要建立新的student物件, if(element.getName().equals("student")){ student=new Student(); listnode(element,student,liststu); }else{ listnode(element,student,liststu); } } } public void iter(List<Student> liststu) { Iterator<Student> it = liststu.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }