使用dom4j解析xml与增删改查

使用dom4j解析xml

dom4j,是一个组织,针对xml解析,提供解析器dom4j
dom4j不是jiacase的一部分,想要使用需要导入dom4j提供的jar包

得到document对象

SAXReader reader = new SAXReader();
Document document = reader.read(url);
document父接口是Node
document里面的方法 getRootElement(): 获取根节点 返回element
Element也是一个接口,父节点是Node
OutputFormat format = OutputFormat.createPrettyPrint():格式化xml文档

使用dom4j查询xml

1、创建解析器
2、得到document
3、得到根节点 getRootElement()
4、得到所有的p1标签
    element(qName):表示获取标签下面的第一个子标签
    elements(qName):获取标签下面为qName的子标签(一层)
    elements():获取标签下面的所有子标签(一层)
5、得到p1下面的name
6、得到name里面的值
public static void selectName() throws Exception {
        //创建解析器
        SAXReader reader = new SAXReader();
        //得到Document
        Document document = reader.read("src/person.xml");
        //得到根节点
        Element root = document.getRootElement();

        //得到p1
        List<Element> list = root.elements("p1");
        //遍历list
        for(Element element : list){
            Element name1 = element.element("name");
            String s = name1.getText();
            System.out.println(s);

        }
    }

使用dom4j实现添加操作

在p1标签末尾添加一个元素
1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、在p1下面添加元素(使用addElement方法)
6、在添加完成之后的元素下面添加文本
7、回写xml
    public static void addAge() throws Exception{
        //创建解析器
        SAXReader reader = new SAXReader();
        //得到Document
        Document document = reader.read("src/person.xml");
        //得到根节点
        Element root = document.getRootElement();
        // 得到p1
        List<Element>p1 = root.elements("p1");
        //添加节点
        for(Element element : p1){
            //添加元素
            Element age1 = element.addElement("age");
            //添加文本
            age1.setText("22");
            //回写xml
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
            xmlWriter.write(document);
            xmlWriter.close();
        }

    }
}

在特定标签前添加一个元素

1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、获取p1下面的所有元素(使用elements方法,返回list集合)
6、创建元素(DocumentHelper.createElement(qName);)
7、添加内容(school.setText(text);)
8、在指定位置添加(使用list内add(int index,E element)方法,index从0开始)
9、回写xml
public static void addAgeBefore() throws Exception{
        //创建解析器
        SAXReader reader = new SAXReader();
        //得到Document
        Document document = reader.read("src/person.xml");
        //得到根节点
        Element root = document.getRootElement();
        // 得到p1
        List<Element>p1 = root.elements("p1");
        //遍历节点
        for(Element element : p1){
            //得到子节点
            List<Element>p2 = element.elements();
            //创建元素(DocumentHelper)
            Element school = DocumentHelper.createElement("shool");
            //创建文本
            school.setText("USTC");
            //添加元素
            p2.add(1,school);

            //回写xml
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
            xmlWriter.write(document);
            xmlWriter.close();
        }
    }

修改节点内容

1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、得到p1下面的age元素
6、修改内容(age.setText(text);)
7、回写xml
public static void modifyAge() throws Exception{
        //创建解析器
        SAXReader reader = new SAXReader();
        //得到Document
        Document document = reader.read("src/person.xml");
        //得到根节点
        Element root = document.getRootElement();
        // 得到p1
        List<Element>p1 = root.elements("p1");
        //遍历节点
        for(Element element : p1){
            //选择age
            Element age1 = element.element("age");
            //修改文本
            age1.setText("30");
            //回写xml
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
            xmlWriter.write(document);
            xmlWriter.close();
        }

    }
    //封装回写代码
    public static void xmlWriters(String path,Document document) {
        try {
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path), format);
            xmlWriter.write(document);
            xmlWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

删除节点

1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、得到p1下面的age元素
6、删除节点(p1.remove(age);)
7、回写xml
    public static void delAge() throws Exception{
        //创建解析器
        SAXReader reader = new SAXReader();
        //得到Document
        Document document = reader.read("src/person.xml");
        //得到根节点
        Element root = document.getRootElement();
        // 得到p1
        List<Element>p1 = root.elements("p1");
        //遍历节点
        for(Element element : p1){
            //选择age
            Element age1 = element.element("age");
            //删除节点
            boolean i = element.remove(age1);
            System.out.println(i);
            //回写xml
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
            xmlWriter.write(document);
            xmlWriter.close();
        }
    }

获取属性的值

1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、得到p1的属性值
注:增加属性使用addAttribute("id2","www");
    public static void getValue() throws Exception {
        //创建解析器
        SAXReader reader = new SAXReader();
        //得到Document
        Document document = reader.read("src/person.xml");
        //得到根节点
        Element root = document.getRootElement();

        //得到p1
        List<Element> list = root.elements("p1");
        //遍历list
        for(Element element : list){
            //得到属性值
            String value = element.attributeValue("id1");
            System.out.println(value);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值