Java中利用dom4j解析XML

早期 JDK 为我们提供了两种 xml 解析技术 DOM(document object model) 和 SAX ( Simple API for XML ),目前已经过时。
目前的主流框架解析XML文件都会使用到第三方提供的dom4j.

SAX 解析, 它跟 W3C 制定的解析不太一样。 它是以类似事件机制通过回调告诉用户当前正在解析的内容。
它是一行一行的读取 xml 文件进行解析的。 不会创建大量的 dom 对象。
所以它在解析 xml 的时候, 在内存的使用上。 和性能上。 都优于 Dom 解析。

而dom4j 是对 jdom 进行了封装,jdom 又是对dom进行的封装。
Dom4j 它是第三方的解析技术。 我们需要使用第三方给我们提供好的类库才可以解析 xml 文件。
先准备好jar包:dom4j.jar
要解析的XML文件:books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   <book sn="SN12341232">
   	<name>辟邪剑谱</name>
   	<price>9.9</price>
   	<author>班主任</author>
   </book>
   <book sn="SN12341231">
   	<name>葵花宝典</name>
   	<price>99.99</price>
   	<author>班长</author>
   </book>
</books>

要封装到的Java对象:Book

public class Book {
    private String sn;
    private String name;
    private BigDecimal price;
    private String author;
    //get和set方法
    //无参和有参构造方法
 }

解析过程:

public class Dom4jTest {
    @Test
    public void test1(){
        //创建一个SAXReader输入流,读取Xml,用来生成document对象
        SAXReader saxReader = new SAXReader();
        try {
            //1.首先读取xml文件
            Document document = saxReader.read("src/books.xml");
            //2.利用document对象获取根元素
            Element rootElement = document.getRootElement();
            //3.利用elements方法获取根元素下所有的子元素
            List<Element> elements = rootElement.elements();
            for(Element book:elements){
                //System.out.println(book.asXML());asXML把标签对象,转化为标签字符串。
                //利用element方法根据标签名来获取指定子元素
                Element name = book.element("name");
                //System.out.println(name.asXML());
                //利用getText方法获取元素的文本内容
                String nameText = name.getText();
                //利用elementText可直接获取指定标签下的文本内容
                String priceText = book.elementText("price");
                String author = book.elementText("author");
                String sn = book.attributeValue("sn");
                //利用获取到的值,构建Book对象
                Book book1 = new Book(sn, nameText, new BigDecimal(Double.parseDouble(priceText)), author);
                System.out.println(book1);
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

结果:
在这里插入图片描述
用到的方法:

  • read():SAXReader 类的方法,传入一个路径,可读取xml文件。
  • getRootElement():Document 类的方法,用来获取根元素。
  • elements():获取当前元素下所有的子元素,以List形式返回。
  • element(String str):根据标签名来获取指定子元素。
  • asXML():Element类的方法,可把标签对象,转化为标签字符串。
  • getText():获取元素的文本内容。
  • elementText(String str):忽略标签下嵌套的子标签,直接获取其文本内容。
  • attributeValue(String str):根据属性名获取属性值。
发布了68 篇原创文章 · 获赞 57 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43598138/article/details/105163776