import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
/**
* 利用DOM4J构建一个xml文件
*/
/**
* 写students.xml:
1)构建Document对象
2)addElement增加根元素
3)逐层增加子元素: addElement
4)元素的setText设置元素内容
5)元素的setAttribute设置元素属性
6)输出
* */
public class BuildXMLDemo {
public static void main(String[] args) {
String[] courses = {"语文","数学","英语","历史"};
String[] students = {"小刘","廖哥","斌哥","杰娃"};
String filename = "src/students.xml";
buildXML(filename,courses,students);
}
/**
* 将课程和学生及成绩生成到一个xml文件中
* @param filename 要生成的xml文件名
* @param courses 课程列表
* @param students 学生列表
*/
private static void buildXML(String filename, String[] courses, String[] students) {
//1)构建Document对象
Document doc = DocumentHelper.createDocument();
//2)addElement增加根元素
Element root = doc.addElement("Record");
//3)逐层增加子元素: addElement
Element head = root.addElement("Head");
Element code = head.addElement("Code");
//添加元素内容
code.setText("1107");
Element exam = head.addElement("Exam");
exam.setText("是");
Element body = root.addElement("Body");
//在编程时,我们假设有这么一个方法,
//它能够将课程列表和学生列表加入到body元素中,
//然后再创建它。
buildBody(body,courses,students);
//同理,写个方法,能够将构造的doc对象输出到指定文件filename中
outputXml(doc,filename);
}
/**
* 将内存中构造的doc对象输出到指定的文件中.
* @param doc doc对象
* @param filename 输出的文件名
*/
private static void outputXml(Document doc, String filename) {
try {
//输出流的目的地是filename
/*FileWriter用法:
* 用来写入字符文件的便捷类。
* 此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。
* 要自己指定这些值,
* 可以先在 FileOutputStream 上构造一个 OutputStreamWriter。
* 文件是否可用或是否可以被创建取决于底层平台。
* 特别是某些平台一次只允许一个 FileWriter(或其他文件写入对象)
* 打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,
* 则此类中的构造方法将失败。
* FileWriter 用于写入字符流。
* 要写入原始字节流,请考虑使用 FileOutputStream。
* */
FileWriter fileWriter = new FileWriter(filename);
//设置将要输出的xml文件格式.缩进.
//createPrettyPrint创建最好的文件格式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
//创建写xml文件的对象
XMLWriter xmlWriter = new XMLWriter(fileWriter,format);
xmlWriter.write(doc);
xmlWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 把课程列表和学生列表加入到Body元素中
* @param body 元素
* @param courses 课程列表
* @param students 学生列表
*/
private static void buildBody(Element body, String[] courses, String[] students) {
for(String course:courses){
//在Body里添加子元素CourseList
Element courseList = body.addElement("CourseList");
Element courseCode = courseList.addElement("CourseCode");
//设置元素内容
courseCode.setText(course);
Element student = courseList.addElement("Student");
buildStudent(student,students);
}
}
/**
* 创建学生元素的子元素,包括学生姓名和成绩
* @param Element student对象
* @param students 学生列表
*/
private static void buildStudent(Element student, String[] students) {
for(String str:students){
Element studentName = student.addElement("StudentName");
studentName.setText(str);
//增加score属性
studentName.addAttribute("Score",new Random().nextInt(100)+"");
}
}
}
构建xml文件案例
最新推荐文章于 2024-07-10 06:14:25 发布