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>