document对象表示的是整个文档(可以是html文档,也可以是xml文档)
dom解析技术是w3c组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现,java对dom技术解析标记也做了实现。sun公司在jdk5版本对dom解析技术进行升级:SAX
SAX解析,它跟w3c制定的解析不太一样,它是类似事件机制通过回调告诉用户当前正在解析的内容,它是一行一行的读取xml文件进行解析的,不会创建大量的dom对象,所以它在解析dom时,在内存的使用上和性能上都优于Dom解析
第三方的解析:
1.jdom是在dom基础上进行封装的
2.dom4j是对jdom进行封装的
3.pull主要是用在andriod手机开发,是在跟sax非常类似都是事件机制解析xml文件
由于dom4j并非sun公司,属于第三方公司,在使用时需要到dom4j官网下载jar包
1.先加载xml文件创建Document对象
2.通过Document对象拿到根元素对象
3.通过根元素.elements(标签名),可以返回一个集合,该集合放了你所指定的标签名的元素对象
4.找到你需要修改、删除的子元素,进行相应的操作
5.保存
将dom4j的jar包加入到idea中
右击选择添加
创建一个Book类将后面的数据进行管理:
package dom4j; import java.math.BigDecimal; public class Book { private String sn; private String name; private String author; private Double price ; public Book() { } public Book(String sn, String name, String author, Double price) { this.sn = sn; this.name = name; this.author = author; this.price = price; } public String getSn() { return sn; } public void setSn(String sn) { this.sn = sn; } 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 Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } @Override public String toString() { return "Book{" + "sn='" + sn + '\'' + ", name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + '}'; } }
创建一个xml文件:
三国演义 罗贯中 28.9 西游记 吴承恩 26.9
创建一个测试类BookTest进行测试
package dom4j; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.junit.jupiter.api.Test; import java.util.List; public class BookTest { @Test public void test01() { //1.创建一个SAXReader输入流,去读取xml配置文件,生成document对象 SAXReader saxReader = new SAXReader(); Document document = null; try { //2.读取books.xml文件 document = saxReader.read("xml/books.xml"); //3.通过document对象获取根元素 Element rootElement = document.getRootElement(); //4.通过根元素获取book标签对象 //element()和elements()都是通过标签名查找子元素 Listbooks = rootElement.elements("book"); //5.遍历处理每个book标签转换为book类 for (Element book : books){ //asXML():把标签对象转换为标签字符串 //System.out.println(book.asXML()); //elementText():获取指定标签名的文本内容 String name = book.elementText("name"); String author = book.elementText("author"); String price = book.elementText("price"); String sn = book.elementText("sn"); Book book1 = new Book(sn, name, author, Double.parseDouble(price)); System.out.println(book1); } } catch (DocumentException e) { throw new RuntimeException(e); } } }