1. 程式人生 > >XML的解析(讀和寫)

XML的解析(讀和寫)

1)使用dom4j需要匯入dom4j對應的jar包:dom4j-1.6.1.jar
2)建立SAXReader類的物件來實現讀取XML文件,程式碼如下:
SAXReader reader = new SAXReader();
3)使用SAXReader類的read方法獲取Document物件,Document 物件是一棵XML文件樹的物件,可為我們提供對文件資料的最初(或最頂層)的訪問入口,程式碼如下:
Document doc = reader.read(new File(“Student.xml”));
4)使用Document物件的getRootElement方法獲取要解析的XML文件的根元素,該方法返回值型別為Element。Element 物件表示 XML文件中的元素。元素可包含屬性、其它元素或文字。如果元素含有文字,則在文字節點中表示該文字,程式碼如下:
Element root = doc.getRootElement();
5)接下來,可以使用Element物件提供的方法繼續解析XML文件,例如:其elements方法用來獲取當前元素下的所有子元素,程式碼如下:
List elements = root.elements();

package com.lyc.xml;

import java.util.ArrayList;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

//xml檔案的內容讀取
public class ReadXmlDemo {

public static void main(String[] args) {
	SAXReader reader = new SAXReader();
	try {
		ArrayList<Student> arrayList = new ArrayList<Student>();
		Document document = reader.read("student.xml");//文件物件
		Element root = document.getRootElement();//根元素
		List<Student> elements = root.elements();//獲取跟元素下所有的子元素
		for (int i = 0; i < elements.size(); i++) {
			Student stu = new Student();
			Element ele = (Element) elements.get(i);//獲取跟元素所有student物件
			Attribute attribute = ele.attribute(0);
			stu.setId(Integer.valueOf(attribute.getValue()));//xml中的屬性id attribute.getValue()
			stu.setName(ele.elementText("name"));//elementText獲取元素
			stu.setAge(Integer.valueOf(ele.elementText("age")));
			stu.setSex(ele.elementText("gender"));
			stu.setScore(Double.parseDouble(ele.elementText("score")));
			arrayList.add(stu);
		}
		
		for (Student student : arrayList) {
			System.out.println(student);
		}
	} catch (DocumentException e) {
		e.printStackTrace();
	}
}

}

package com.lyc.xml;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

//xml檔案的生成(寫)
public class StringOutputXml {

public static void main(String[] args) {
	List<Student> list = new ArrayList<Student>();
	list.add(new Student(1,"張飛","男",32,89));
	list.add(new Student(2,"張飛1","男",31,87));
	list.add(new Student(3,"張飛2","男",33,85));
	list.add(new Student(4,"張飛3","男",34,84));
	list.add(new Student(5,"張飛4","男",35,83));
	
	Document listdoc = DocumentHelper.createDocument();//建立document物件
	Element rootElement =  listdoc.addElement("students");//新增根元素
	
	for (Student student : list) {//新增子元素和文字內容
		Element stElement = rootElement.addElement("student");
		stElement.addAttribute("id",student.getId()+"");
		stElement.addElement("name").addText(student.getName());
		stElement.addElement("age").addText(student.getAge()+"");
		stElement.addElement("gender").addText(student.getSex());
		stElement.addElement("score").addText(student.getScore()+"");
	}
	
	
	try {
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("student1.xml"),"utf-8");
		//建立一個漂亮的輸出格式物件
		OutputFormat opf = OutputFormat.createPrettyPrint();
		
		//建立寫xml文件物件
		XMLWriter writer = new XMLWriter(osw,opf);
		writer.write(listdoc);//將上面建立的文件物件通過XMLWriter寫出,寫出到student2.xml中
		osw.close();
		writer.close();
		System.out.println("完成");
	} catch (UnsupportedEncodingException e) {
		e.printStackTrace();
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
	
}

}

package com.lyc.xml;

/**

  • model
  • 學生類
  • @author JLB

*/
public class Student {

private int id;
private String name;
private String sex;
private int age;
private double score;
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public double getScore() {
	return score;
}
public void setScore(double score) {
	this.score = score;
}
@Override
public String toString() {
	return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", score=" + score + "]";
}
public Student() {
	super();
}
public Student(int id, String name, String sex, int age, double score) {
	super();
	this.id = id;
	this.name = name;
	this.sex = sex;
	this.age = age;
	this.score = score;
}

}

//操作的xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<student id="1">
	<name>張飛</name>
	<age>17</age>
	<gender>男</gender>
	<score>63</score>
</student>

<student id="2">
	<name>趙雲</name>
	<age>18</age>
	<gender>男</gender>
	<score>89</score>
</student>

<student id="3">
	<name>關羽</name>
	<age>17</age>
	<gender>男</gender>
	<score>78</score>
</student>

<student id="4">
	<name>韓愈</name>
	<age>16</age>
	<gender>男</gender>
	<score>89</score>
</student>

<student id="5">
	<name>程咬金</name>
	<age>17</age>
	<gender>男</gender>
	<score>68</score>
</student>

<student id="6">
	<name>李開</name>
	<age>17</age>
	<gender>男</gender>
	<score>88</score>
</student>