XML文档解析之DOM4J解析

来源:互联网 发布:真盖塔 知乎 编辑:程序博客网 时间:2024/05/22 16:39

使用DOM4J解析也是需要自己加载相关的jar包,DOM4J jar包的下载地址:https://github.com/dom4j/dom4j/releases/tag/dom4j_1_6_1

解析步骤

  1. 创建SAXReader对象saxReader;
  2. 通过saxReader对象的read方法将xml文件加载到Document实例对象中;
  3. 使用getRootElement方法获取xml文件的根节点;
  4. 使用elementIterator方法获取根节点的所有子节点集合;
  5. 遍历子节点集合,使用attribute方法获取每个子节点的属性集合;
  6. 使用getName方法获取属性和节点名称,getValue方法获取属性值,getStringValue方法获取节点值;

常用API

No 类名称 方法 方法描述 1 SAXReader SAXReader() 获取SAXReader对象 2 SAXReader read(File file) 将xml文件加载到 Document对象中 3 Document getRootElement() 获取xml文件的根节点 4 Element elementIterator() 获取该节点的所有子节点的集合 5 Element attribute() 获取该节点的所有属性的集合 6 Element getName() 获取节点的名称 7 Element getValue() 获取节点的值 8 Attribute getName() 获取属性名 9 Attribute getValue() 获取属性值

待解析xml文件

<?xml version="1.0" encoding="UTF-8" ?><bookstore>    <book id = "1">        <name>冰与火之歌</name>        <author>乔治马丁</author>        <year>2014</year>        <price>89</price>    </book>    <book id = "2">        <name>安徒生童话</name>        <year>2004</year>        <price>77</price>        <language>English</language>    </book></bookstore>

book结构

package XML;/** * Created by lin_y on 2017/6/18. */public class Book {    private String id;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    private String name;    private String author;    private String year;    private double price;    private String language;    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 String getYear() {        return year;    }    public void setYear(String year) {        this.year = year;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public String getLanguage() {        return language;    }    public void setLanguage(String language) {        this.language = language;    }    @Override    public String toString() {        return "Book{" +                "id='" + id + '\'' +                ", name='" + name + '\'' +                ", author='" + author + '\'' +                ", year='" + year + '\'' +                ", price=" + price +                ", language='" + language + '\'' +                '}';    }}

解析文件

package XML;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import java.io.File;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * Created by lin_y on 2017/6/20. */public class XMLDOM4J {    public static List<Book> books = new ArrayList<>();    public static void main(String []args) throws DocumentException {        // 创建SAXReader对象saxReader        SAXReader saxReader = new SAXReader();        // 通过saxReader对象的read方法将xml文件加载到Document实例对象中        Document document = saxReader.read(new File("xml/book.xml"));        Element rootElement = document.getRootElement();        // 获取根节点的所有子节点的集合        Iterator<Element> nodes = rootElement.elementIterator();        while(nodes.hasNext()){            Book book = new Book();            Element node = nodes.next();            // 获取book的属性            List<Attribute> attributes = node.attributes();            for(Attribute attr : attributes){                if("id".equals(attr.getName())){                    book.setId(attr.getValue());                }            }            Iterator<Element> e = node.elementIterator();            while(e.hasNext()){                Element bookChild = e.next();                String name = bookChild.getName();                String value = bookChild.getStringValue();                switch (name){                    case "name":                        book.setName(value);                        break;                    case "author":                        book.setAuthor(value);                        break;                    case "year":                        book.setYear(value);                        break;                    case "price":                        book.setPrice(Double.parseDouble(value));                        break;                    case "language":                        book.setLanguage(value);                        break;                }            }            books.add(book);        }        Iterator<Book> e = books.iterator();        while(e.hasNext()){            System.out.println(e.next());        }    }}

程序运行结果

这里写图片描述