XML用途
- XML指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具
- XML应用于web开发的许多方面,常用于简化数据的存储和共享。
- XML简化数据共享
- XML简化数据传输
- XML简化平台的变更
XML读取与生成
存放员工信息的xml文件 emolist.xml
?xml version="1.0" encoding="UTF-8"?>
张三丰
22
男
3000
李四
46
男
10000
王五
21
女
4500
赵六
23
女
5000
钱七
35
男
8000
哈哈
35
男
8000
张三丰
22
男
3000
李四
46
男
10000
王五
21
女
4500
赵六
23
女
5000
钱七
35
男
8000
哈哈
35
男
8000
用于存放员工信息的值对象 Emp.java
/**
* 用来表示一个员工信息
*
* VO value object值对象
* 所谓指对象,就是当前的每个实例就是用来保存一组
* 数据使用.
* @author soft01
*
*/
public class Emp {
private int id;
private String name;
private int age;
private String gender;
private int salary;
public Emp() {
}
public Emp(int id, String name, int age, String gender, int salary) {
super();
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.salary = salary;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
@Override
public String toString() {
return id + ", " + name + ", " + age + "," + gender + "," + salary ;
}
}
解析XML ParseXmlDemo.java
/**
* 解析XML
* @author soft01
*
*/
public class ParseXmlDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Emp(1,"张三",22,"男",3000));
list.add(new Emp(3,"李四",23,"女",4000));
list.add(new Emp(4,"王五",23,"男",4000));
list.add(new Emp(5,"赵六",25,"女",4000));
/*
* 原来我们程序使用的数据都是写在程序里的
* 这样带来的问题是数据发送改变就会修改源代码
* 这在实际开放中是极其不可取的!
* 所以在实际开发中,我们通常的做法是程序
* 与程序运行时需要的数据分离开,将数据保存
* 到一个文件中,程序运行时通过读取文件中的
* 数据来运行。这样将来数据有修改只需要在该
* 文件中作出修改即可,程序无需做任何改动。
*
* 将emplist.xml文件中的员工信息读出来存入
* List集合。
*
* 使用DOM解析XML的大致步骤
* 1:创建SAXReader
* 2:使用SAXReader读取XML文档并生成
* Document对象
* 这一部就是DOM耗时耗资源的地方,因为要
* 将XML文档全部读取完毕并以Document对象
* 存入内存。
* 3:通过Document获取根元素
* 4:按照XML文档结构从根元素开始逐级开始获取子元素
* 以达到获取XML文档数据的目的
*/
try {
//1
SAXReader reader = new SAXReader();
//2
// reader.read(new File("emplist.xml"));
Document doc = reader.read(new FileInputStream("emplist.xml"));
System.out.println("读取文档完毕!");
/*
* 3获取根元素
* Document提供的方法:
* Element getRootElement()
* 获取当前XML文档的根元素
* org.dom4j下的Element的每一个实例
* 用于表示XML文档中的一个元素(一对标签)
*/
Element root = doc.getRootElement();
/*
* Element提供了获取当前元素信息的方法:
* 常用:
* 1:String getName()
* 获取当前元素的名字
* 2:String getText();
* 获取当前元素中间的文本数据(开始
* 标签与结束标签中间的文本内容)
* 3:List elements()
* 获取当前元素中的所有子元素
* 5:Element element(String name)
* 获取当前元素中指定名字的子元素
* 6:String elementText(String name)
* 获取当前元素中指定名字子元素中间的
* 文本.
* String str = ele.elementText(name);
* 效果等同于:
* String str = ele.element(name).getText();
* 7:Attribute attribute(String name)
* 获取当前元素中指定名字的属性
* 8:String attributeValue(String name)
* 获取当前元素中指定名字的属性的值
*/
List emplist = root.elements();
for(Element empEle : emplist) {
//获取员工名字
Element nameEle = empEle.element("name");
String name = nameEle.getText();
System.out.println(name);
//获取年龄
Element ageEle = empEle.element("age");
int age = Integer.parseInt(ageEle.getText());
System.out.println(age);
//获取性别
String gender = empEle.elementText("gender");
System.out.println(gender);
//获取工资
int salary = Integer.parseInt(empEle.elementText("salary"));
System.out.println(salary);
//获取ID属性
int id = Integer.parseInt(empEle.attributeValue("id"));
System.out.println(id);
Emp emp = new Emp(id,name,age,gender,salary);
list.add(emp);
}
System.out.println("解析完毕!");
list.forEach((e)->System.out.println(e));
// for(Emp e : list) {
// System.out.println(e);
// }
} catch (Exception e) {
e.printStackTrace();
}
}
}
生成XML文档 WriterXMLDrmo.java
/**
* 使用DOM生成XML文档
* @author soft01
*
*/
public class WriteXMLDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Emp(1,"张三",22,"男",3000));
list.add(new Emp(2,"李四",23,"女",4000));
list.add(new Emp(3,"王五",24,"男",5000));
list.add(new Emp(4,"赵六",25,"女",6000));
/*
* 使用DOM生成一个XML文档的大致步骤:
* 1:创建一个Document实例,表示一个空白文档
* 2:向Document中添加根元素
* 3:按照XML文档结构要求逐级添加子元素和数据
* 以形成该结构
* 4:创建XMLWriter
* 5:使用XMLWriter将Document实例写出以形成
* xml文档
*/
//1
Document doc =DocumentHelper.createDocument();
/*
* 2 添加根元素
* Document提供方法:
* Element addElement(String name)
* 向当前文档中添加根元素,并将该元素以Element实例
* 返回,以便继续操作根元素。
* 需要注意,该方法只能调用一次,因为一个XML文档中
* 只允许有一个根元素。
*/
Element root = doc.addElement("list");
/*
* Elemt也提供了相关的操作方法:
*
* Element addElement(String name)
* 向当前元素添加给定名字的子元素并返回
*
* Element addText(String text)
* 向当前元素中添加文本,添加到该开始标签与
* 结束标签之间
*
*/
for(Emp emp : list) {
Element empEle = root.addElement(("emp"));
//添加
Element nameEle = empEle.addElement("name");
nameEle.addText(emp.getName());
//添加
Element ageEle = empEle.addElement("age");
ageEle.addText(emp.getAge()+"");
//添加
Element genderEle = empEle.addElement("gender");
genderEle.addText(emp.getGender());
//添加
Element salaryEle = empEle.addElement("salary");
salaryEle.addText(emp.getSalary()+"");
//添加id属性
empEle.addAttribute("id", emp.getId()+"");
}
XMLWriter writer = null;
try {
writer = new XMLWriter(new FileOutputStream("myemp.xml"),OutputFormat.createPrettyPrint());
writer.write(doc);
System.out.println("写成完毕!");
}catch(Exception e) {
e.printStackTrace();
}finally {
if(writer!=null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}