Java 操作xml文件--dom4j解析

一、dom4j解析

    当我们使用Java自带的dom解析时,过程繁琐,操作性局限,由此产生更灵活的java xml框架dom4j。

        1)下载dom4j

                使用dom4j需要先去下载jar包,官方网址https://dom4j.github.io/   访问网站过慢可以使用UU加速器,免费加速学术资源网站。
    

        2)配置jar包

                下载完成后,在自己的项目中新建一个文件夹directory,名为lib,将jar包粘贴到lib中,右击后选择Add as librarys
    

        3)获取Document类对象

                1.SAXReader saxReader = new SAXReader();
                2.Document document = saxReader.read("收藏信息.xml");//xml路径
        

         4)获取Writer类对象


                1.第一种漂亮的格式


                    // 将document从内存中写入xml文件
                    // 获取OutputFormat类对象 格式化 让xml文件变好看
                    OutputFormat outputFormat = OutputFormat.createPrettyPrint();
                    // 获取FileWriter类对象 需要操作的文件路径 此处是相对路径
                    FileWriter fileWriter = new FileWriter("收藏信息.xml");
                    / 创建XMLWriter类对象 将fileWriter指向的文件 格式化
                    XMLWriter xmlWriter = new XMLWriter(fileWriter, outputFormat);
                    // 将内存中的document写入xml文件
                    xmlWriter.write(document);
                    // 关闭资源  很重要 否则写不进xml文件
                    xmlWriter.close();
                2.默认格式
                    // 获取FileWriter类对象,指向xml文件
                    FileWriter fileWriter = new FileWriter("收藏信息.xml");
                    // 将自己写入xml文件
                    document.write(fileWriter);
                    // 关闭流 很重要  否则写不进去
                    fileWriter.close(); 

二、增删改查操作 

        (1)增:

package com.practise02;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.FileWriter;
import java.io.IOException;


public class AddXml {
    public static void main(String[] args) throws DocumentException, IOException {
        /*
         * 使用 dom4j 对xml文件进行增加元素
         *<?xml version="1.0" encoding="UTF-8"?>
            <PhoneInfo>
                <Brand name="华为">
                    <Type name="P60"/>
                    <Type name="Mate50"/>
                    <Type name="Mate50Pro"/>
                </Brand>
                <Brand name="XiaoMi">
                    <Type name="Mi13"/>
                    <Type name="Mi13Pro"/>
                    <Type name="Mi12SUtrl"/>
                </Brand>
             </PhoneInfo>
         * */

        // 获取document对象
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("收藏信息.xml");

        // 获取根元素 PhoneInfo
        Element rootElement = document.getRootElement();

        // 向根元素中添加子元素Brand
        Element brandElement = rootElement.addElement("Brand");

        // 设置Brand元素属性及值
        brandElement.addAttribute("name", "OPPO");

        // 向元素Brand中添加子元素Type
        Element typeElement = brandElement.addElement("Type");

        // 设置Type的属性及值
        typeElement.addAttribute("name", "Findx6");

//        // 将document从内存中写入xml文件
//        // 获取OutputFormat类对象 格式化 让xml文件变好看
//        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
//        // 获取FileWriter类对象 需要操作的文件路径 此处是相对路径
//        FileWriter fileWriter = new FileWriter("收藏信息.xml");
//        // 创建XMLWriter类对象 将fileWriter指向的文件 格式化
//        XMLWriter xmlWriter = new XMLWriter(fileWriter, outputFormat);
//        // 将内存中的document写入xml文件
//        xmlWriter.write(document);
//        // 关闭资源  很重要 否则写不进xml文件
//        xmlWriter.close();

        /*
        * 也可以不使用漂亮的格式化写入xml,这样会更简单
        * */
        FileWriter fileWriter = new FileWriter("收藏信息.xml");
        document.write(fileWriter);
        fileWriter.close();

    }
}

        xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
    <Brand name="华为">
        <Type name="P60"/>
        <Type name="Mate50"/>
        <Type name="Mate50Pro"/>
    </Brand>
    <Brand name="XiaoMi">
        <Type name="Mi13"/>
        <Type name="Mi13Pro"/>
        <Type name="Mi12SUtrl"/>
    </Brand>

    <Brand name="OPPO">
        <Type name="Findx6"/>
    </Brand>
</PhoneInfo>

        (2)删除:

package com.practise02;

import com.dom4j.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.xml.sax.SAXException;

import java.util.Iterator;

public class RemoveXml {
    public static void main(String[] args) throws DocumentException, SAXException {
        /*
        * 删除xml指定的元素
        * 将获取document和写入xml的代码封装便于使用
        * <?xml version="1.0" encoding="UTF-8"?>
        <PhoneInfo> 
          <Brand name="华为"> 
            <Type name="P60"/>  
            <Type name="Mate50"/>  
            <Type name="Mate50Pro"/> 
          </Brand>  
          <Brand name="XiaoMi"> 
            <Type name="Mi13"/>  
            <Type name="Mi13Pro"/>  
            <Type name="Mi12SUtrl"/> 
          </Brand> 
        </PhoneInfo>
        * */
        
        // 使用自己写的工具类  获取document
        Document document = Dom4jUtils.getDocument("收藏信息.xml");
        
        // 获取根元素
        Element rootElement = document.getRootElement();

        // 将元素存入Iterator
        Iterator<Element> elementIterator = rootElement.elementIterator();
        // 遍历 找到要删除的元素  如 Brand为OPPO
        while(elementIterator.hasNext()){
            Element element = elementIterator.next();
            if (element.attributeValue("name").equals("OPPO"))
                rootElement.remove(element);
        }

        // 调用写好的工具类 将内存中的document写入xml问及那
        Dom4jUtils.writeDocument(document,"收藏信息.xml");

    }
}

        xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<PhoneInfo> 
  <Brand name="华为"> 
    <Type name="P60"/>  
    <Type name="Mate50"/>  
    <Type name="Mate50Pro"/> 
  </Brand>  
  <Brand name="XiaoMi"> 
    <Type name="Mi13"/>  
    <Type name="Mi13Pro"/>  
    <Type name="Mi12SUtrl"/> 
  </Brand> 
</PhoneInfo>

        (3)改:

package com.practise02;

import com.dom4j.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.xml.sax.SAXException;

import java.util.Iterator;

public class SetXml {
    public static void main(String[] args) throws DocumentException, SAXException {
        /*
        * 修改xml文件
        * <?xml version="1.0" encoding="UTF-8"?>
        <PhoneInfo>
          <Brand name="华为">
            <Type name="P60"/>
            <Type name="Mate50"/>
            <Type name="Mate50Pro"/>
          </Brand>
          <Brand name="XiaoMi">
            <Type name="Mi13"/>
            <Type name="Mi13Pro"/>
            <Type name="Mi12SUtrl"/>
          </Brand>
        </PhoneInfo>
        */

        // 获取document
        Document document = Dom4jUtils.getDocument("收藏信息.xml");

        // 获取就根元素
        Element rootElement = document.getRootElement();

        // 获取元素集合
        Iterator<Element> elementIterator = rootElement.elementIterator();

        // 遍历  找到要修改的元素 XiaoMi 改 小米
        while(elementIterator.hasNext()){
            Element element = elementIterator.next();
            // 判断
            if (element.attributeValue("name").equals("XiaoMi"))
                element.setAttributeValue("name","小米");
        }

        // 将document写入xml文件
        Dom4jUtils.writeDocument(document,"收藏信息.xml");


    }
}

        xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<PhoneInfo> 
  <Brand name="华为"> 
    <Type name="P60"/>  
    <Type name="Mate50"/>  
    <Type name="Mate50Pro"/> 
  </Brand>  
  <Brand name="小米"> 
    <Type name="Mi13"/>  
    <Type name="Mi13Pro"/>  
    <Type name="Mi12SUtrl"/> 
  </Brand> 
</PhoneInfo>

        (4)查 

package com.practise02;

import com.dom4j.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.xml.sax.SAXException;

import java.util.Iterator;

public class SearchXml {
    public static void main(String[] args) throws DocumentException, SAXException {
        /* 对xml文件进行遍历
        * <?xml version="1.0" encoding="UTF-8"?>
        <PhoneInfo>
          <Brand name="华为">
            <Type name="P60"/>
            <Type name="Mate50"/>
            <Type name="Mate50Pro"/>
          </Brand>
          <Brand name="小米">
            <Type name="Mi13"/>
            <Type name="Mi13Pro"/>
            <Type name="Mi12SUtrl"/>
          </Brand>
        </PhoneInfo>
        *
        * */

        // 获取document对象
        Document document = Dom4jUtils.getDocument("收藏信息.xml");

        // 获取根元素
        Element rootElement = document.getRootElement();

        // 获取Brand元素集合
        Iterator<Element> brandElementIterator = rootElement.elementIterator();

        // 遍历
        while(brandElementIterator.hasNext()){
            // 取出Brand元素
            Element element = brandElementIterator.next();
            // 打印Brand元素
            System.out.println(element.attributeValue("name"));
            // 获取Type元素集合
            Iterator<Element> typeElementIterator = element.elementIterator();
            // 遍历
            while(typeElementIterator.hasNext()){
                // 取出Type元素
                Element typeElement = typeElementIterator.next();
                // 打印Type元素
                System.out.println("\t" + typeElement.attributeValue("name"));
            }
        }


    }
}

       控制台:

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

 林先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值