主题简介:
本文中详细说明在JAVA中如何用Jdom的org.jdom.output包中的XMLOutputter类和Format类配合,创建XML文件保存程序中的数据
要求:
现writeXml程序中有一list集合,保存了若干个"①学生实体"对象,要求将集合中的数据保存为②结构的stu.xml磁盘文件
①实体对象如下:stu.java
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.t97.bean;
public class Stu {
private String id;
private String add;
private String name;
private String sex;
private int age;
public String getAdd() {
return add;
}
public void setAdd(String add) {
this.add = add;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String 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;
}
@Override
public String toString() {
return "id:"+this.id+"\tadd:"+this.add+"\tname:"+this.name+"\tsex:"+this.sex+"\tage:"+this.age;
}
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
②stu.xml文件如下:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<stus>
<stu ID="s1">
<name>姓名</name>
<add>地址</add>
<sex>男</sex>
<age>21</age>
</stu>
</stus>
-------------------------------------------------------------------------------------------
实现思路:
1.导入org.jdom.xpath类的四个.jar包,名称如下:
jaxen-core.jar/jaxen-jdom.jar/jdom.jar/saxpath.jar. (jdom网站提供下载)
2.新建一个TestWriteXml.java文件来写入名为stu.xml文件,内容如下,并详解.
-------------------------------------------------------------------------------------------
TestWriteXml.java:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.t97.write;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import com.t97.bean.Stu;
/**
* 此类功能:用于把程序中的数据保存到XML文件中
* @author 尹当
*/
public class TestWriteXml {
/**
* 程序主入口方法
* @param args
*/
public static void main(String[] args) {
//创建实例一个List集合,保存程序中的数据
List<Stu> list = new ArrayList<Stu>();
//调用setValue(list)方法往集合中添加数据
setValue(list);
//创建实例一个Document对象保存内存文档对象
Document document = new Document();
//创建一个名为"stusEleRoot"的根节点元素
Element stusEleRoot = new Element("stus");
//循环遍历集合中的数据,添加到根元素节点中
for (Stu stu : list) {
//创建第二子节点stu,保存每个学生的信息
Element eleStu = new Element("stu");
//添加名为"ID"的属性到stu节点中
eleStu.setAttribute("ID", stu.getId());
//创建名为"name"的子节点元素,并把STU对象的"name"属性值设置为节点元素的值,然后添加到“stu”学生节点下
Element eleName = new Element("name");
eleName.setText(stu.getName());
eleStu.addContent(eleName);
//创建名为"add"的子节点元素,并把STU对象的"add"属性值设置为节点元素的值,然后添加到“stu”学生节点下
Element eleAdd = new Element("add");
eleAdd.setText(stu.getAdd());
eleStu.addContent(eleAdd);
//创建名为"sex"的子节点元素,并把STU对象的"sex"属性值设置为节点元素的值,然后添加到“stu”学生节点下
Element eleSex = new Element("sex");
eleSex.setText(stu.getSex());
eleStu.addContent(eleSex);
//创建名为"age"的子节点元素,并把STU对象的"age"属性值设置为节点元素的值,然后添加到“stu”学生节点下
Element eleAge = new Element("age");
eleAge.setText(stu.getAge() + "");//转类型(javaBean中的stu.getAge()值为integer类型)
eleStu.addContent(eleAge);
//将“eleStu”元素作为子节点添加到“eleRoot”根节点下
stusEleRoot.addContent(eleStu);
}
//实例输出流
XMLOutputter out = new XMLOutputter();
//得到格式化对象
Format format = Format.getPrettyFormat();
//输出流应用格式化对象
out.setFormat(format);
//添加根节点到内存文档对象中
document.setRootElement(stusEleRoot);
try {
//使用XMLOutputter的output方法持久化一个名为“stu.xml”的磁盘文件
out.output(document, new FileOutputStream("stu.xml"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 程序启动时,往集合中循环添加10个元素,以模拟程序中的数据
* @param list集合
*/
private static void setValue(List<Stu> list) {
for (int i = 0; i < 10; i++) {
Stu stu = new Stu();
stu.setAdd("地址" + (i + 1));
stu.setAge((i + 21));
stu.setId("s" + (i + 1));
stu.setName("姓名" + (i + 1));
stu.setSex("男");
list.add(stu);
}
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
个人心得-尹当