• xml解析技术介绍、使用dom4j读取xml文件内容


    xml解析技术介绍

     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读取xml文件内容

    由于dom4j并非sun公司,属于第三方公司,在使用时需要到dom4j官网下载jar包

    dom4j编程步骤:

    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()都是通过标签名查找子元素
                List books = 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);
            }
    
    
    
        }
    }
    

  • 相关阅读:
    上门预约服务类的App功能详解
    Docker容器内数据备份到系统本地
    Python -- I/O编程
    P1025 [NOIP2001 提高组] 数的划分
    map/set疑难一网打尽(含经典面试)
    手机用Postern配置socks5全局代理详细教程
    如何通过三行配置解决在Kubernetes中的gRPC扩展问题
    SpringBoot 整合 RabbitMQ 实现消息回调、手动确认 (二) 有图 有源码
    Element Plus& Ant Design(react) 表格的分页封装
    Linux——信号量(定义、示例、信号量接口)
  • 原文地址:https://blog.csdn.net/weixin_46065214/article/details/126492978