• java使用dom4j对XML进行CURD操作


    要使用dom4j必须导入两个jar包:

    dom4j-1.6.1.jar

    jaxen-1.1-beta-6.jar

    使用dom4j新建一个XML文件:

    /**
         * 利用dom4j完成新增一个xml文件
         * @throws Exception 
         */
        @Test
        public void test_Cread() throws Exception{
            // 创建一个空的dom对象
            Document dom = DocumentHelper.createDocument();
            // 创建一个根标签 persons
            Element root = dom.addElement("persons");
            //  在root标签中添加一个子标签 person
            Element person1 = root.addElement("person");
            // 给person添加一个属性 address
            person1.addAttribute("address", "上海");
            // 添加子标签 name
            Element name1 = person1.addElement("name");
            name1.setText("张飞");
            // 添加子标签 age
            Element age1 = person1.addElement("age");
            age1.setText("30");
            
            // 创建另外一个person标签
            Element person2 = root.addElement("person");
            // 给person添加一个属性 address
            person2.addAttribute("address", "天津");
            // 添加子标签 name
            Element name2 = person2.addElement("name");
            name2.setText("关羽");
            // 添加子标签 age
            Element age2 = person2.addElement("age");
            age2.setText("25");
            
            // 保存xml文件
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
            writer.write(dom);
            writer.close();
        }

    执行结果:(会在项目的根目录下产生一个:persons.xml文件内容如下)

    查询元素:

    /**
         * 利用dom4j完成查询元素,使用xpath技术查询
         * @throws Exception 
         */
        @Test
        public void test_Select() throws Exception{
            // 获取dom对象
            SAXReader saxReader = new SAXReader();
            Document dom = saxReader.read(new FileReader("persons.xml"));
            // 获取有 address="天津"属性的person标签
            Node node = dom.selectSingleNode("//person[@address='天津']");
            // 再获取 当前节点下面的name标签的值
            List<Element> nameList = node.selectNodes("./name");
            Element name = nameList.get(0);
            String nameValue = name.getText();
            // 打印的值为关羽
            System.out.println(nameValue);
            
        }

    修改元素的值:

    /**
         * 利用dom4j完成修改元素的值
         * @throws Exception 
         */
        @Test
        public void test_Modify() throws Exception{
            // 获取dom对象
            SAXReader saxReader = new SAXReader();
            Document dom = saxReader.read(new FileReader("persons.xml"));
            // 将关羽的年龄改成38
            Element age = (Element) dom.selectSingleNode("//person[@address='天津']/age");
            age.setText("38");
            
            // 保存xml文件
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
            writer.write(dom);
            writer.close();
        }

    执行结果:

    删除节点:

    /**

     * 利用dom4j完成删除节点

     * @throws Exception

     */

    @Test

    public void test_Delete() throws Exception{

    // 获取dom对象

    SAXReader saxReader = new SAXReader();

    Document dom = saxReader.read(new FileReader("persons.xml"));

    // 删除关羽的年龄

    // 先获取关羽的节点

    Element person = (Element) dom.selectSingleNode("//person[@address='天津']");

    // 获取关羽下面的age节点

    Node age = person.selectSingleNode("./age");

    // 删除节点,用父节点删除子节点

    person.remove(age);

    // 保存xml文件

    OutputFormat format = OutputFormat.createPrettyPrint();

    XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);

    writer.write(dom);

    writer.close();

    }

    执行结果(删除了关羽下面的年龄)

     

    CURD的所有代码:

    package com.xiaoshitou.test;
    
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    import org.junit.Test;
    
    /**
     * 使用dom4j完成xml文件的CURD
     * @author Beck
     *
     */
    public class TestXML {
        /**
         * 利用dom4j完成删除节点
         * @throws Exception 
         */
        @Test
        public void test_Delete() throws Exception{
            // 获取dom对象
            SAXReader saxReader = new SAXReader();
            Document dom = saxReader.read(new FileReader("persons.xml"));
            // 删除关羽的年龄
            // 先获取关羽的节点
            Element person = (Element) dom.selectSingleNode("//person[@address='天津']");
            // 获取关羽下面的age节点
            Node age = person.selectSingleNode("./age");
            // 删除节点,用父节点删除子节点
            person.remove(age);
            
            // 保存xml文件
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
            writer.write(dom);
            writer.close();
            
        }
        /**
         * 利用dom4j完成修改元素的值
         * @throws Exception 
         */
        @Test
        public void test_Modify() throws Exception{
            // 获取dom对象
            SAXReader saxReader = new SAXReader();
            Document dom = saxReader.read(new FileReader("persons.xml"));
            // 将关羽的年龄改成38
            Element age = (Element) dom.selectSingleNode("//person[@address='天津']/age");
            age.setText("38");
            
            // 保存xml文件
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
            writer.write(dom);
            writer.close();
        }
        
        /**
         * 利用dom4j完成查询元素,使用xpath技术查询
         * @throws Exception 
         */
        @Test
        public void test_Select() throws Exception{
            // 获取dom对象
            SAXReader saxReader = new SAXReader();
            Document dom = saxReader.read(new FileReader("persons.xml"));
            // 获取有 address="天津"属性的person标签
            Node node = dom.selectSingleNode("//person[@address='天津']");
            // 再获取 当前节点下面的name标签的值
            List<Element> nameList = node.selectNodes("./name");
            Element name = nameList.get(0);
            String nameValue = name.getText();
            // 打印的值为关羽
            System.out.println(nameValue);
            
        }
        
        /**
         * 利用dom4j完成新增一个xml文件
         * @throws Exception 
         */
        @Test
        public void test_Cread() throws Exception{
            // 创建一个空的dom对象
            Document dom = DocumentHelper.createDocument();
            // 创建一个根标签 persons
            Element root = dom.addElement("persons");
            //  在root标签中添加一个子标签 person
            Element person1 = root.addElement("person");
            // 给person添加一个属性 address
            person1.addAttribute("address", "上海");
            // 添加子标签 name
            Element name1 = person1.addElement("name");
            name1.setText("张飞");
            // 添加子标签 age
            Element age1 = person1.addElement("age");
            age1.setText("30");
            
            // 创建另外一个person标签
            Element person2 = root.addElement("person");
            // 给person添加一个属性 address
            person2.addAttribute("address", "天津");
            // 添加子标签 name
            Element name2 = person2.addElement("name");
            name2.setText("关羽");
            // 添加子标签 age
            Element age2 = person2.addElement("age");
            age2.setText("25");
            
            // 保存xml文件
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileWriter("persons.xml"), format);
            writer.write(dom);
            writer.close();
        }
    }
  • 相关阅读:
    Redis 为什么用跳表而不用平衡树
    常用的垂直细分引擎工具
    如何为Kafka集群选择合适的Partitions数量
    一图看懂深度学习框架对比----Caffe Torch Theano TensorFlow
    关于深度学习(deep learning)的常见疑问 --- 谷歌大脑科学家 Caffe缔造者 贾扬清
    神经网络CNN训练心得--调参经验
    数据归一化处理
    centos上tensorflow一键安装脚本
    深度学习---tensorflow简介
    kali linux之msf后渗透阶段
  • 原文地址:https://www.cnblogs.com/xiaoshitoutest/p/7169038.html
Copyright © 2020-2023  润新知