Java从零开始学四十三(DOM4j解析XML)

一、创建XML

// 建立XML
    public static void gernatorXML() {
        // 创建Document对象
        Document doc = DocumentHelper.createDocument();
        // 创建根节点students
        Element studentsElement = doc.addElement("students");
        // 创建子节点student
        Element studentElement1 = studentsElement.addElement("student");
        // 添加ID属性
        studentElement1.addAttribute("id", "1001");
        // 添加子节点
        studentElement1.addElement("name").setText("张三");
        studentElement1.addElement("age").setText("18");
        studentElement1.addElement("sex").setText("男");
        studentElement1.addElement("phone").setText("13800138000");
        studentElement1.addElement("address").setText("深圳宝安");

        // 再创建同样的2个student节点
        Element studentElement2 = studentsElement.addElement("student");
        // 添加ID属性
        studentElement2.addAttribute("id", "10012");
        // 添加子节点
        studentElement2.addElement("name").setText("李四");
        studentElement2.addElement("age").setText("19");
        studentElement2.addElement("sex").setText("女");
        studentElement2.addElement("phone").setText("13412369854");
        studentElement2.addElement("address").setText("上海");
        // 再创建同样的2个student节点
        Element studentElement3 = studentsElement.addElement("student");
        // 添加ID属性
        studentElement3.addAttribute("id", "10013");
        // 添加子节点
        studentElement3.addElement("name").setText("王五");
        studentElement3.addElement("age").setText("25");
        studentElement3.addElement("sex").setText("女");
        studentElement3.addElement("phone").setText("13410110104");
        studentElement3.addElement("address").setText("广东");

        try {
            // 创建XML 将Document写入XML
            // 设置格式
            OutputFormat format = OutputFormat.createPrettyPrint();
            // 设置字符编码也可以设置为gb2312或者gbk
            format.setEncoding("utf-8");
            // 输入
            XMLWriter writer = new XMLWriter(
                    new FileWriter("xml/students.xml"), format);

            // 写入文档
            writer.write(doc);
            // 关闭流
            writer.close();
            // 输出提示
            System.out.println("======写入成功=======");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

二、解析XML

    // 读取XML
    public static void getXML() {

        try {
            // 读取XML
            SAXReader reader = new SAXReader();
            Document doc = reader.read("xml/students.xml");
            // 获取根节点
            Element root = doc.getRootElement();
            // 获取子节点集合
            List<Element> stulList = root.elements();
            // 遍历
            for (Element ele : stulList) {
                // 获取属性
                String id = ele.attributeValue("id");
                System.out.println("学生ID: " + id);
                // 获取子节点的文本内容 name
                String name = ele.elementText("name");
                // age年龄
                String age = ele.elementText("age");
                // sex
                String sex = ele.elementTextTrim("sex");
                // phone
                String phone = ele.elementTextTrim("phone");
                // address
                String address = ele.elementTextTrim("address");
                System.out.println("姓名:" + name + "\t年龄:  " + age + "\t 性别:  "
                        + sex + "\t\t电话:" + phone + "\t\t地址:  " + address);
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        }

    }

三、增加节点

//增加新的节点
    public static void addXML(){

        try {
            //读取XML创建解析器
            SAXReader reader=new SAXReader();
            //创建Document对象
            Document doc=reader.read("xml/students.xml");
            //获取根节点
            Element root=doc.getRootElement();
            //创建新的节点
            Element student=root.addElement("student");
            //添加属性
            student.addAttribute("id", "10020");
            //创建子节点
            student.addElement("name").setText("张三丰");
            student.addElement("age").setText("108");
            student.addElement("sex").setText("男");
            student.addElement("phone").setText("13800138001");
            student.addElement("address").setText("武当山");
            //写入XML
            //设置字符编码和格式
            OutputFormat format=new OutputFormat();
            format.setEncoding("utf-8");
            //创建输出流
            XMLWriter writer=new XMLWriter(new FileWriter("xml/students.xml"), format);
            //写入Document
            writer.write(doc);
            //关闭流
            writer.close();
            //给出提示
            System.out.println("======增加成功=======");

        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

四、修改节点

//修改节点内容根据 id10013将王五的姓名=王小五,年龄30,性别:男,电话:138000138000,地址:北京
    public static void modify(){

        try {
            //创建SAXReader解析器
            SAXReader reader=new SAXReader();
            //创建Document
            Document doc=reader.read("xml/students.xml");
            //找到根节点
            Element root=doc.getRootElement();
            //子节点集合
            List<Element> studentList=root.elements();
            //遍历查找
            for (Element ele : studentList) {

                if(ele.attributeValue("id").equals("10013")){
                    ele.element("name").setText("王小五");
                    ele.element("age").setText("30");
                    ele.element("sex").setText("男");
                    ele.element("phone").setText("138000138000");
                    ele.element("address").setText("北京");

                }
            }
                //写入XML
                //设置字符格式和编码
                OutputFormat format=new OutputFormat();
                format.setEncoding("utf-8");
                XMLWriter writer=new XMLWriter(new FileWriter("xml/students.xml"), format);
                //将Document写入
                writer.write(doc);
                //关闭流
                writer.close();
                //给出提示
                System.out.println("====修改成功====");

        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

五、删除节点XML

/删除节点 删除王小五的节点
    public static void delete(){

        try {
            //创建SAXReader 解析器
            SAXReader reader=new SAXReader();
            //创建Document对象
            Document doc=reader.read("xml/students.xml");
            //获取根节点
            Element root=doc.getRootElement();
            //集合
            List<Element> stuList=root.elements();
            //遍历
            for (Element ele : stuList) {
                if(ele.attributeValue("id").equals("10013")){
                    //获取父节点,并删除这个节点
                    ele.getParent().remove(ele);
                }
            }
            //写入XML
            //设置字符编码格式
            OutputFormat format =new OutputFormat();
            format.setEncoding("utf-8");
            //输出流
            XMLWriter writer=new XMLWriter(new FileWriter("xml/students.xml"), format);
            writer.write(doc);
            writer.close();
            System.out.println("===删除成功===");

        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
时间: 2024-08-14 08:41:13

Java从零开始学四十三(DOM4j解析XML)的相关文章

在java项目中怎样利用Dom4j解析XML文件获取数据

在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进行直接读取,能够说这是程序中直接封装好的,包含配置文件里书写的格式等等.那么,假设.想要在配置文件里写一些其它的数据,直接以XML文件的格式进行书写.这个时候在后台怎样读取XML文件里的数据呢?这里利用Dom4j来解析XML文件里连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

在java项目中如何利用Dom4j解析XML文件获取数据

在以前的学习.net时经常会遇到利用配置文件来解决项目中一些需要经常变换的数据,比如数据库的连接字符串儿等.这个时候在读取配置文件的时候,我们通常会用到一个雷configuration,通过这个类来进行直接读取,可以说这是程序中直接封装好的,包括配置文件中书写的格式等等.那么,如果,想要在配置文件中写一些其他的数据,直接以XML文件的格式进行书写,这个时候在后台如何读取XML文件中的数据呢?这里利用Dom4j来解析XML文件中连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

Java从零开始学四十二(DOM解析XML)

一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <PhoneInfo name="手机品牌"> <Brand name="华为"> <Type name="U8650"> </Type> </Brand

Java从零开始学四十五(Socket编程基础)

一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

Java从零开始学三十三(JAVA IO- File类)

一.简述 在整个io包中,唯一表示与文件本身有关的类就是File类.使用File类可以进行创建或删除文件等常用操作.要想使用File类,则首先要观察File类的构造方法,此类的常用构造方法如下所示: public File(String pathname) ->实例化File类的时候,必须设置好路径. 二.File类中的主要方法和常量 No. 方法或常量 类型 描述 1 public static final String pathSeparator 常量 表示路径的分隔符(windows是:“

Java从零开始学四十一(反射简述二)

一.实例化Class类对象 实例化Class类对象的方法有三种: 第一种:通过forName()方法 第二种:类.class 第三种:对象.getClass() 二.Class类的常用方法 No. 方法 类型 描述 1 public static Class<?> forName(String className) throws ClassNotFoundException 普通 传入完整的“包.类”名称实例化Class对象 2 public Constructor[] getConstruc

Java从零开始学四十四(多线程)

一.进程与线程 1.1.进程 进程是应用程序的执行实例. 进程是程序的一次动态执行过程,它经历了从代码加载.执行到执行完毕的一个完整过程,这个过程也是进程本身从产生.发展到最终消亡的过程 特征: 动态产生,动态消亡. 进程是并发性的. 进程独立性.是一个独立运行的基本单位,也是系统分配资源和调度的基本单位 1.2.线程 多线程是实现并发机制的一种有效手段.进程和线程一样,都是实现并发的一个基本单位 线程:进程内部的一个执行单元,它是程序中一个单一的顺序控制流程 特点: 线程依赖进程生存 一个进程

Java从零开始学四十七(注解简述)

一.Java中注解Annotation 什么是注解:用来描述数据的数据(元数据). Java代码里的特殊标记.它为代码中添加用Java程序无法表达的额外信息提供一种形式化的方法,使用我们可以在未来的某一个时刻方便的使得这些注解修饰的程序元素.  作用: 用将由编译器来测试和验证的格式,存储有关程序额外信息 生成 描述符文件,甚至是新的类定义 减轻编写模板代码的负担 使代码更加干净易读 注解和注释不同 注解与普通的代码注释有一定的区别,也有一定的联系.注解和注释都属于对代码的描述: 注释的作用只是

Java从零开始学四十(反射简述一)

一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反射.通过反射,Java可以于运行时加载.探知和使用编译期间完全求和的类.生成其对象实体,调用其方法或者对属性设值.所以Java算是一个半动态的语言吧. 反射的概念: 在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方