Java 持久化操作之 --XML

时间:2022-05-07
本文章向大家介绍Java 持久化操作之 --XML,主要内容包括1)有关XML简介、2)解析XML技术:、2-2)使用SAX与DOM4J解析XML:增删改查读、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

1)有关XML简介

    XML(EXtensible Markup Language)可扩展标记语言

    特点:XML与操作系统、编程语言的开发平台无关

               实现不同系统之间的数据交换

    作用:数据交换、配置应用程序和网站

大致文档结构:

XML文档内容由一系列标签元素组成:

XML编写注意事项:

    所有XML元素都必须有结束标签

    XML标签对大小写敏感

    XML必须正确的嵌套

    同级标签以缩进对齐

    元素名称可以包含字母、数字或其他的字符

    元素名称不能以数字或者标点符号开始

    元素名称中不能含空格

XML中的转义符列表:

2)解析XML技术:

DOM:

            基于XML文档树结构的解析

            适用于多次访问的XML文档

            特点:比较消耗资源

SAX:

            基于事件的解析

            适用于大数据量的XML文档

            特点:占用资源少,内存消耗小

DOMJ4:

            非常优秀的java XML API

            性能优异、功能强大

            开放源代码

2-1)DOM解析XML:增删改查d

    DOM介绍:文档对象模型(Document Object Model):DOM把XML文档映射成一个倒挂的树

代码演示DOM解析XML

2-2)使用SAX与DOM4J解析XML:增删改查读

    需要结合DOM4j架包使用:下载链接地址如下:

    需要先将架包引用到项目中:

代码演示如下:

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4jXml {
    public static void main(String[] args) throws Exception {
        // 读取XML
        // reader();
        // 添加XML节点
        // addXml();
        // 修改节点数据
        // modfiy();
        // modfiy1();
        // 删除节点
        // delete();
        // delete1();
    }
    /**
     * 读取XML文件
     */
    public static void reader() throws Exception {
        // 创建读取器
        SAXReader reader = new SAXReader();
        // 读取xml文档
        Document read = reader.read("lbl/NewFile.xml");
        // 获取根节点
        Element rootElement = read.getRootElement();
        // 遍历根节点下的子节点信息
        for (Object item : rootElement.elements()) {
            // 拿到子节点下的值
            String text = ((Element) item).element("bookName").getText();
            System.out.println(text);
            // 拿到当前节点的属性值
            System.out.println(((Element) item).attribute("id").getText());
        }
    }
    /**
     * 向XML文件添加节点
     */
    public static void addXml() throws Exception {
        // 创建读取器
        SAXReader reader = new SAXReader();
        // 读取xml文档
        Document read = reader.read("lbl/NewFile.xml");
        // 获取根节点
        Element rootElement = read.getRootElement();
        // 创建要添加的节点
        Element createElement = DocumentHelper.createElement("book");
        createElement.setAttributeValue("id", "003");
        createElement.setAttributeValue("type", "测试数据");
        // 创建添加的节点的3个子节点
        Element createElement1 = DocumentHelper.createElement("bookName");
        createElement1.setText("唔明书");
        Element createElement2 = DocumentHelper.createElement("bookPrice");
        createElement2.setText("20");
        Element createElement3 = DocumentHelper.createElement("bookAuthor");
        createElement3.setText("测试");
        // 把3个子节点 添加到book节点下
        createElement.add(createElement1);
        createElement.add(createElement2);
        createElement.add(createElement3);
        // 把book子节点添加到根节点下
        rootElement.add(createElement);
        // 重新将XML写入硬盘
        OutputStream ou = new FileOutputStream("lbl/NewFile.xml");
        Writer wr = new OutputStreamWriter(ou, "utf-8");
        read.write(wr);
        wr.close();
        ou.close();
        System.out.println("add  ok");
    }
    /**
     * 修改节点信息
     */
    public static void modfiy() throws Exception {
        // 创建读取器
        SAXReader reader = new SAXReader();
        // 读取xml文档
        Document read = reader.read("lbl/NewFile.xml");
        // 获取根节点
        Element rootElement = read.getRootElement();
        // 拿到要修改的节点
        for (Object element : rootElement.elements()) {
            if (((Element) element).attribute("id").getText().equals("003")) {
                ((Element) element).element("bookName").setText("数据测试!");
                break;
            }
        }
        /**
         * ((Element) element).element("bookName").setName("数据测试!");修改节点name名称
         */
        // 重新将XML写入硬盘
        OutputStream ou = new FileOutputStream("lbl/NewFile.xml");
        Writer wr = new OutputStreamWriter(ou, "utf-8");
        read.write(wr);
        wr.close();
        ou.close();
        System.out.println("modfiy  ok");
    }
    /**
     * 修改节点信息方案二 Text
     */
    public static void modfiy1() throws Exception {
        // 创建读取器
        SAXReader reader = new SAXReader();
        // 读取xml文档
        Document read = reader.read("lbl/NewFile.xml");
        // 获取根节点
        Element rootElement = read.getRootElement();
        // 拿到要修改的节点---方式二 Text true
        @SuppressWarnings("unchecked")
        List<Object> attributes = (rootElement.elements());
        Element ment = (Element) attributes.get(1);
        ment.element("bookName").setText("青年测试");
        // 重新将XML写入硬盘
        OutputStream ou = new FileOutputStream("lbl/NewFile.xml");
        Writer wr = new OutputStreamWriter(ou, "utf-8");
        read.write(wr);
        wr.close();
        ou.close();
        System.out.println("modfiy  ok");
    }

    /**
     * 删除节点信息
     */
    public static void delete() throws Exception {
        // 创建读取器
        SAXReader reader = new SAXReader();
        // 读取xml文档
        Document read = reader.read("lbl/NewFile.xml");
        // 获取根节点
        Element rootElement = read.getRootElement();
        // 拿到要修改的节点
        for (Object element : rootElement.elements()) {
            if (((Element) element).attribute("id").getText().equals("003")) {
                rootElement.remove(((Element) element));
                break;
            }
        }
        // 重新将XML写入硬盘
        OutputStream ou = new FileOutputStream("lbl/NewFile.xml");
        Writer wr = new OutputStreamWriter(ou, "utf-8");
        read.write(wr);
        wr.close();
        ou.close();
        System.out.println("delete  ok");
    }

    /**
     * 删除节点方式二 Text true
     */
    public static void delete1() throws Exception {
        // 创建读取器
        SAXReader reader = new SAXReader();
        // 读取xml文档
        Document read = reader.read("lbl/NewFile.xml");
        // 获取根节点
        Element rootElement = read.getRootElement();
        // 拿到要修改的节点---方式二 Text true
        @SuppressWarnings("unchecked")
        List<Object> attributes = (rootElement.elements());
        Element ment = (Element) attributes.get(1);
        rootElement.remove(ment);
        // 重新将XML写入硬盘
        OutputStream ou = new FileOutputStream("lbl/NewFile.xml");
        Writer wr = new OutputStreamWriter(ou, "utf-8");
        read.write(wr);
        wr.close();
        ou.close();
        System.out.println("delete  ok");

    }
}