学习笔记-Java中的xml文件读取之DOM4J解析

来源:互联网 发布:java的对称杨辉三角 编辑:程序博客网 时间:2024/05/22 03:26

DOM4J同样也是一种针对Java的XML解析技术。
它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。
DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。现如今,越来越多的Java软件都在使用DOM4J来读写XML,比如Hibernation中配置文件的解析是用DOM4J.

DOM4J解析XML步骤:

0. 添加DOM4J的jar包。点击这里跳转到DOM4J官网
1. 创建SAXReader的对象reader
2. 通过reader对象的reader方法,加载xml文件,获取document对象
3. 通过document对象获取根节点
4. 通过element对象的elementIterator方法获取迭代器
5. 遍历迭代器,获取根节点中的信息
6. 通过对根节点的再迭代,获取子节点的信息

举个例子:
在下面的这个程序中,解析一个books.xml文件,并将属性值保存到book实体类对象的List中

public class DOM4JTest {    private static List<Book> booksList = new ArrayList<Book>();    public static void main(String[] args) {        //1、创建SAXReader的对象reader        SAXReader reader = new SAXReader();        try {            //2、通过reader对象的reader方法,加载xml文件,获取document对象            Document document = reader.read(new File("src/res/books.xml"));            //3、通过document对象获取根节点            Element bookstore = document.getRootElement();            //4、通过element对象的elementIterator方法获取迭代器            Iterator it = bookstore.elementIterator();            //5、遍历迭代器,获取根节点中的信息            while (it.hasNext()) {                Book bookEntity = new Book();                System.out.println("=========开始遍历某一本书========");                Element book = (Element) it.next();                //获取book的属性名以及 属性值                List<Attribute> bookAttrs = book.attributes();                for (Attribute attr : bookAttrs) {                    System.out.println("属性名:" + attr.getName() + "---属性值:"+ attr.getValue());                    if (attr.getName().equals("id")) {                        bookEntity.setId(attr.getValue());                    }                }                Iterator itt = book.elementIterator();                while (itt.hasNext()) {                    Element bookChild = (Element) itt.next();                    System.out.println("节点名:" + bookChild.getName() + "---节点值:"+ bookChild.getStringValue());                    if (bookChild.getName().equals("name")) {                        bookEntity.setName(bookChild.getStringValue());                    }else if(bookChild.getName().equals("author")){                        bookEntity.setAuthor(bookChild.getStringValue());                    }else if(bookChild.getName().equals("year")){                        bookEntity.setYear(bookChild.getStringValue());                    }else if(bookChild.getName().equals("price")){                        bookEntity.setPrice(bookChild.getStringValue());                    }else if(bookChild.getName().equals("language")){                        bookEntity.setLanguage(bookChild.getStringValue());                    }                }                System.out.println("=========结束遍历某一本书========");                booksList.add(bookEntity);                bookEntity=null;            }            for (Book bk : booksList) {                System.out.println(bk.toString());            }        } catch (DocumentException e) {            e.printStackTrace();        }    }}

运行结果:
这里写图片描述

1 0