XML文件写入与解析

版权声明:版权声明:本文为博主原创文章,未经允许请勿转载,谢谢 https://blog.csdn.net/a972669015/article/details/88051102

依赖jar包

<dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
</dependency>

使用DOM4J写入XML的大致步骤:

1:创建一个Document对象表示一个空白文档

Document doc = DocumentHelper.createDocument();

2:向Document中添加根元素

Element root = doc.addElement("list");

Document提供了添加根元素的方法:

Element addElement(String name)
向当前文档中添加给定名字的根元素,并以Element实例的形式返回,以便于继续向根元素追加信息.该方法只能调用一次,因为一个文档只能有一个根元素.

3:从根元素开始按照要生成的文档结构逐级添加子元素及信息

for(Emp e : list){
                //向根元素中追加子元素<emp>
                Element empEle = root.addElement("emp");
                //向<emp>中追加子元素<name>
                Element nameEle = empEle.addElement("name");
                //向<name>标签中间添加文本
                nameEle.addText(e.getName());
                
                Element ageEle = empEle.addElement("age");
                ageEle.addText(String.valueOf(e.getAge()));
                
                Element genderEle = empEle.addElement("gender");
                genderEle.addText(e.getGender());
                
                Element salaryEle = empEle.addElement("salary");
                salaryEle.addText(String.valueOf(e.getSalary()));
                
                //向<emp>中追加id属性
                empEle.addAttribute("id", String.valueOf(e.getId()));        
            }

Element提供了追加相关信息的方法:

Element addElement(String name)
向当前元素中追加子元素并将其返回,以便继续对其追加
Element addText(String text)
向当前元素的开始与结束标签之间添加文本,返回的仍然是当前元素,以便对当前元素继续做其他追加操作.
Element addAttribute(String name,String value)
向当前元素中追加指定名字与对应值的属性,返回值仍然是当前元素.

4:创建XmlWriter

//org.dom4j.io.XMLWriter
XMLWriter writer = new XMLWriter(new FileOutputStream("emplist.xml"),OutputFormat.createPrettyPrint() );

5:将Document通过XmlWriter写出以生成XML文档  

writer.write(doc);
writer.close();

使用DOM4J解析XML的大致步骤:

1. 创建SAXReader

SAXReader reader = new SAXReader();

2.使用SAXReader读取xml文档并得到对应的Document对象

Document doc = reader.read(new File("emplist.xml"));

3.通过Document获取根元素

Element root = doc.getRootElement();

Element的每一个实例用于表示xml文档中的一个元素(一对标签)。其提供了很多获取其表示的元素相关信息的方法:

String getName()  获取当前元素的名字(标签的名字)

String getText()   获取当前元素中间的文本(开始和结束标签中间的文本信息)

String elementText(String name)  获取当前元素中指定名字的子元素中间的文本

例如:
         String str = e.elementText("name");  等同于  String str = e.element("name").getText();

Element element(String name)   获取当前元素中指定名字的子元素

List elements()   获取当前元素中所有子元素

List elements(String name)   获取当前元素中所有的指定名字的同名子元素

Attribute attribute(String name)   获取当前元素中指定名字的属性

4.从根元素中按照文档结构逐级获取子元素,已达到遍历XML文档数据的目的

将emplist.xml文件中保存的员工信息解析出来,以若干Emp实例形式存入List集合.
    *程序中的数据不应在程序中写死,否则一旦数据有修改,就要修改源程序.

Emp.java:

package xml;
/**
 * Emp的每个实例用于表示一个员工信息
 * @author adminitartor
 *
 */
public class Emp {
	private int id;
	private String name;
	private int age;
	private String gender;
	private int salary;
	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;
	}
	public String toString(){
		return id+","+name+","+age+","+gender+","+salary;
	}
	
}

emplist.xml:

<?xml version="1.0" encoding="UTF-8"?>
<list>
	<emp id="1">
		<name>张三</name>
		<age>44</age>
		<gender>男</gender>
		<salary>5000</salary>
	</emp>
	<emp id="2">
		<name>李四</name>
		<age>23</age>
		<gender>女</gender>
		<salary>6000</salary>
	</emp>
	<emp id="3">
		<name>王五</name>
		<age>24</age>
		<gender>男</gender>
		<salary>8000</salary>
	</emp>
	<emp id="4">
		<name>赵六</name>
		<age>28</age>
		<gender>男</gender>
		<salary>15000</salary>
	</emp>
	<emp id="5">
		<name>钱七</name>
		<age>27</age>
		<gender>女</gender>
		<salary>20000</salary>
	</emp>
	<emp id="6">
		<name>孙八</name>
		<age>43</age>
		<gender>男</gender>
		<salary>30000</salary>
	</emp>
</list>

ParseXmlDemo:

package xml;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

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

/**
 * 解析XML
 * @author adminitartor
 *
 */
public class ParseXmlDemo {
	public static void main(String[] args) {
		
		List<Emp> list = new ArrayList<Emp>();
		
		try {
			//1 
			SAXReader reader = new SAXReader();
			
			//2
			Document doc = reader.read(new File("emplist.xml"));
//			reader.read(new FileInputStream("emplist.xml"));
			
			//3
			Element root = doc.getRootElement();
//			System.out.println(root.getName());
			
			/*
			 * 获取根标签下所有<emp>标签
			 */
			List<Element> empList = root.elements("emp");
			/*
			 * 将每个<emp>标签表示的员工信息解析
			 * 出来以Emp实例形式存入list集合
			 */
			for(Element empEle : empList){
				//获取员工名字
				//1获取<name>标签
				Element nameEle = empEle.element("name");
				//2获取中间的文本数据
				String name = nameEle.getText();
				
				int age = Integer.parseInt(
					empEle.element("age").getText()	
				);
				
				String gender = empEle.elementText("gender");
				int salary = Integer.parseInt(
					empEle.elementText("salary")	
				);
				
				//获取id
//				Attribute att = empEle.attribute("id");
//				int id = Integer.parseInt(
//					att.getValue()
//				);				
				int id = Integer.parseInt(
					empEle.attributeValue("id")
				);
				Emp emp = new Emp(id,name,age,gender,salary);
				list.add(emp);
			}
			
			System.out.println("解析完毕!");
			for(Emp e : list){
				System.out.println(e);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



 
 

 

猜你喜欢

转载自blog.csdn.net/a972669015/article/details/88051102
今日推荐