Java SE ------- XML(小解--上)

1.导入dom4j和jaxen
打开pom.xml复制以下代码保存即可自动安装

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>tedu.cn</groupId>
  <artifactId>JSD1604_XML</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  	<dependency>
	    <groupId>dom4j</groupId>
	    <artifactId>dom4j</artifactId>
	    <version>1.6.1</version>
	</dependency>
  	<dependency>
	    <groupId>jaxen</groupId>
	    <artifactId>jaxen</artifactId>
	    <version>1.1.4</version>
	</dependency>
  </dependencies>
</project>

2.创建一个emplist.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<list>
	<emp id="1">
		<name>张三</name>
		<age>18</age>
		<gender></gender>
		<salary>3000</salary>
	</emp>
	<emp id="2">
		<name>李四</name>
		<age>18</age>
		<gender></gender>
		<salary>3000</salary>
	</emp>
	<emp id="3">
		<name>张发三</name>
		<age>18</age>
		<gender></gender>
		<salary>3000</salary>
	</emp>
	<emp id="4">
		<name>法竞三</name>
		<age>18</age>
		<gender></gender>
		<salary>3000</salary>
	</emp>
	<emp id="5">
		<name>张给</name>
		<age>18</age>
		<gender></gender>
		<salary>3000</salary>
	</emp>
	<emp id="6">
		<name>帆帆</name>
		<age>18</age>
		<gender></gender>
		<salary>5000</salary>
	</emp>
	
</list>

3.创建一个emp.java的类调用emp.xml

package day12;
/**
 * 该类用于表示xml文档中的一个员工信息
 * @author Acer
 *
 */
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 "Emp [id=" + id + ", name=" + name + ", age=" + age + ", gender=" + gender + ", salary=" + salary + "]";
	}
	
	
}

3.使用Dom解析xml文档,创建一个PraseXmlDemo.java解析emplist.xml

package day12;

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

import javax.management.Attribute;

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

/**
 * 使用Dom解析xml文档
 * @author Acer
 *
 */
public class ParseXmlDemo {

	public static void main(String[] args) {
		/*
		 * 解析emplist.xml文档,将所有的员工
		 * 信息读取出来并转换成若干emp实例
		 * 存入一个list集合中
		 * 
		 * 解析XML的流程:
		 * 1.创建SAXReader
		 * 2.使用SAXReader读取XML文档并返回
		 * 	Document对象
		 * 	这一步就是DOM解析耗时耗资源的体现
		 * 	因为DOM会将XML文档全部读取并以一个Document
		 * 	对象的形式存于内存。
		 * 	Document对象用于描述解析的XML文档内容。
		 * 3.根据Document对象回去根元素
		 * 4.按照xml的结构从根元素中开始逐级获取子元素
		 * 	以达到便利xml的目的
		 * 
		 */
		try {
			//1
			SAXReader reader = new SAXReader();
			//2
			Document doc = reader.read(
					new FileInputStream("emplist.xml"));
			/*
			 * 3.获取根元素
			 * Element的每一个实例用于表示xml文档
			 * 中的一个元素(一堆标签)
			 * 这里获取的相当于式emplist.xml文档中的
			 * <list>标签 
			 */
			Element root = doc.getRootElement();
			/*
			 * 
			 * Element提供了获取元素的相关方法
			 * 
			 * String getName()
			 * 获取当前标签的名字
			 * 
			 * List elements()
			 * 获取当前标签下的所有子标签
			 * 
			 * List elements(String name)
			 * 获取当前标签下所有同名子标签
			 * 
			 * Element element(String name)
			 * 获取指定名字的子标签
			 * 
			 * Attribute attribute(String name)
			 * 获取指定名字的属性
			 * 
			 * String getText()
			 * 获取当前标签中的文本(前标签和后标签中间的文本信息
			 * ,前提是确实为文本而不是子标签)
			 */
			List<Emp> emplist = new ArrayList<Emp>();
			/*
			 * 获取根标签<list>下面的所有子标签<emp>
			 */
			List<Element> elements = root.elements();
			/*
			 * 遍历所有<emp>标签并解析出该员工相关信息并一个Emp
			 * 实例保存然后将其存入emplist集合
			 * 
			 */
			for(Element empEle : elements) {
				//获取名字
				Element nameEle = empEle.element("name");
				String name = nameEle.getTextTrim();
				//获取age
				int age = Integer.parseInt(
						empEle.elementTextTrim("age"));
				String gender = 
						empEle.elementTextTrim("gender");
				int salary = Integer.parseInt(
						empEle.elementTextTrim("salary")); 
				/*
				 * 获取emp标签中的id属性
				 * Attribute的每一个实例用于表示一个属性信息
				 * 常用的方法:
				 * String getName()获取当前属性名
				 * String getValue()获取当前属性值
				 */
				org.dom4j.Attribute attr = empEle.attribute("id");
				int id = Integer.parseInt(
						(String) attr.getValue());
				Emp emp = new Emp(
						id, name, age, gender, salary);
				emplist.add(emp);
			}
			System.out.println("解析完毕!");
			System.out.println("共"+emplist.size()+"个员工");
			for(Emp emp1 : emplist) {
				System.out.println(emp1);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

4.使用DOM生成xml文档,创建WriterXmlDemo.java文件生成myemp.xml

package day12;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Writer;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.RowSetInternal;
import javax.sql.rowset.WebRowSet;
import javax.sql.rowset.spi.XmlWriter;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 *  使用DOM生成xml文档
 * @author Acer
 *
 */
public class WriteXmlDemo {

	public static void main(String[] args) {
		List<Emp> emplist = 
				new ArrayList<Emp>();
		emplist.add(new Emp(1,"阿飞",23,"男",2300));
		emplist.add(new Emp(2,"阿他",22,"女",25300));
		emplist.add(new Emp(3,"阿发",82,"男",2300));
		emplist.add(new Emp(4,"给飞",22,"女",42300));
		emplist.add(new Emp(5,"阿就",252,"男",2300));
		emplist.add(new Emp(6,"额外飞",22,"男",8800));
		
		/*
		 * 将emplist集合中的员工信息保存到
		 * myemp.xml文档中
		 * 
		 * 写出XML文档的大致步骤:
		 * 1.创建一个Document对象表示一个空白的xml文档
		 * 2.向Document对象中添加根元素
		 * 3.按照应当生成的xml文档的格式逐级向根元素中
		 * 添加子元素以形成xml文档格式
		 * 4.创建xmlwriter
		 * 5.通过xmlwriter将Document写出
		 */
		XMLWriter writer = null;
		try {
			//1
			Document document = 
					DocumentHelper.createDocument();
			/*
			 * 2添加跟标签<list>
			 * Document提供了添加根元素的方法
			 * 
			 * Element addElement(String name)
			 * 该方法可以向当前文档中添加给定名字的根元素,并添加
			 * 进去的该元素以一个Element实力返回,以便于对的该元素 
			 * 继续操作
			 * 需要注意,该方法只能调用一次,应为一个文档中只能有
			 * 一个根元素
			 * 
			 */
			Element root = 
					document.addElement("list");
			/*
			 * 将emplist集合中的每个员工信息以一个
			 * <emp>标签的形式保存到<list>标签中
			 * 
			 */
			for(Emp emp : emplist) {
				/*
				 * Element提供了相关方法:
				 * 
				 * Element addElement(String name)
				 * 向当前标签中添加给定名字的子标签
				 * 并将其返回,以便继续操作
				 * 
				 * Element addTest(String text)
				 * 向当前标签中添加文本信息,返回值为当前标签
				 * 
				 * Element addAttribute(
				 * 		String name, String value)
				 * 向当前标签中添加属性,返回值为当前标签
				 */
				//向根标签<list>中添加子标签<emp>
				Element empEle = 
						root.addElement("emp");
				//向<emp>标签添加<name>标签
				Element nameEle = 
						empEle.addElement("name");
				nameEle.addText(emp.getName());
				//向<emp>标签添加<age>标签
				empEle.addElement("age").addText(
						emp.getAge()+"");
				//向<emp>标签添加<gender>标签
				Element genderEle = 
						empEle.addElement("gender");
				genderEle.addText(emp.getGender());
				//向<emp>标签添加<salary>标签
				Element salaryEle = 
						empEle.addElement("salary");
				salaryEle.addText(emp.getSalary()+"");
				
				//添加属性:id
				empEle.addAttribute("id", emp.getId()+"");
			}
			FileOutputStream fos = 
					new FileOutputStream("myemp.xml");
			writer = new XMLWriter(fos,OutputFormat.createPrettyPrint());
			writer.write(document);
			System.out.println("写出完毕!");
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			if(writer != null) {
				try {
					writer.close();
				} catch (IOException e) {
					// TODO: handle exception
					e.printStackTrace();
				}
			}
		}
	}
}

生成 的myemp.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<list>
  <emp id="1">
    <name>阿飞</name>
    <age>23</age>
    <gender></gender>
    <salary>2300</salary>
  </emp>
  <emp id="2">
    <name>阿他</name>
    <age>22</age>
    <gender></gender>
    <salary>25300</salary>
  </emp>
  <emp id="3">
    <name>阿发</name>
    <age>82</age>
    <gender></gender>
    <salary>2300</salary>
  </emp>
  <emp id="4">
    <name>给飞</name>
    <age>22</age>
    <gender></gender>
    <salary>42300</salary>
  </emp>
  <emp id="5">
    <name>阿就</name>
    <age>252</age>
    <gender></gender>
    <salary>2300</salary>
  </emp>
  <emp id="6">
    <name>额外飞</name>
    <age>22</age>
    <gender></gender>
    <salary>8800</salary>
  </emp>
</list>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章