XML解析练习

一、需求

  •  1、XML解析常见的四种:
    • sax解析
    • dom解析
    •  jdom解析
    • dom4j解析

 但是最常用的,还是dom4j,所以,下面我们就是使用一个整体的项目文件,来实现一个解析xml文件的小练习

二、功能实现

1、建立maven项目,因为使用整体项目管理工具,方便我们引入dom4j的包,便于测试!

                                                                           

2、 配置pom.xml文件,引入dom4j依赖

3、现在我们就可以开始写我们的xml文件了,这些文件一般都会放在资源文件夹里,由于我们这小练习,是要解析xml文件,所以,我们可以自定义文件里的标签内容,例如:定义书本信息。

                                                                      

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book id = "1001">
		<name>open</name>
		<author>tom</author>
		<price>20</price>
	</book>
	<book id = "1002">
		<name>Java</name>
		<author>lili</author>
		<price>21</price>
	</book>
	<book id = "1003">
		<name>Java</name>
		<author>lisa</author>
		<price>24</price>
	</book>
</books>

4、因为要解析它,所以,我们可以把这个文件里的信息封装成一个Books实体类,便于之后使用对象去操作。

                                                                     

package com.briup.test;

import java.io.Serializable;
/**
 * 书本信息pojo类
 * @author LuHua
 *
 */
public class Books implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String id;
	private String name;
	private String author;
	private int price;
	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 getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Books [id=" + id + ", name=" + name + ", author=" + author + ", price=" + price + "]";
	}
	
}

 5、最后写一个测试类,使用dom4j里面的对象以及方法去解析xml文件,其中最重要的一个使用过程,就是使用了dom4j中的io包里的SaxReader方式。

                                                                        

package com.briup.test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * 测试类
 * @author LuHua
 *
 */
public class BooksTest {

	public static void main(String[] args) {

		try {
			// 解析xml文档
			SAXReader saxReader = new SAXReader();
			Document document = saxReader.read("src/main/resources/com/briup/test/Books.xml");
			// 获取根元素
			Element element = document.getRootElement();
			// 获取标签元素放到一个lisy集合中
			List<Element> list = element.elements();

			// 创建一个Students类的list集合容器
			List<Books> list2 = new ArrayList<Books>();
			// 遍历标签元素
			for (Element element2 : list) {
				// 创建Students对象
				Books books = new Books();
				// a.将解析后信息封装为对象
				books.setId(element2.attributeValue("id"));

				List<Element> ele = element2.elements();
				for (Element e : ele) {
					if ("name".equals(e.getName())) {
						books.setName(e.getText());
					} else if ("author".equals(e.getName())) {
						books.setAuthor(e.getText());
					} else if ("price".equals(e.getName())) {
						books.setPrice(Integer.parseInt(e.getText()));
					}
				}
				// b.将每个对象添加到容器中
				list2.add(books);
			}

			// c.构建对象输出流,将容器序列化到文件中

			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("src/test/resources/Books.txt"));
			out.writeObject(list2);
			out.flush();
			out.close();
			System.out.println("已经完成!");
			ObjectInputStream ios = new ObjectInputStream(new FileInputStream("src/test/resources/Books.txt"));
			Object object = ios.readObject();
			System.out.println(object.toString());
			ios.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

 6、最后我们可以看看实现的效果,因为我这还是用了对象流进行文件的输入输出,把处理好的数据进行另存到另外一个文件中去,然后再从文件中读取出来输出在控制台,虽然过程有些繁琐,但是运用到了多个知识点!

                                                                           

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值