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

5 篇文章 0 订阅

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();
        }
    }

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值