Java封装工具类操作XML文件


前言

xml文件是大家熟知的配置文件,我们当然可以通过java来对其创建删改查,比如说生成一个这
在这里插入图片描述


一、方法

1.创建文件

接下来我们模拟创建一个pom文件中的依赖

/**
 * 创建XML文档
 */
public static void createXML(String filePath) throws Exception {
    // 创建Document对象
    Document document = DocumentHelper.createDocument();
    // 创建节点,首节点默认为根节点
    Element rootElement = document.addElement("project");
    Element parentElement = rootElement.addElement("parent");
    parentElement.addComment("版本号");
    Element groupIdElement = parentElement.addElement("groupId");
    Element artifactIdElement = parentElement.addElement("artifactId");
    Element versionElement = parentElement.addElement("version");
    // 设置节点内容
    groupIdElement.setText("org.apache.poi");
    artifactIdElement.setText("poi-excelant");
    versionElement.setText("3.14");
    // 设置输出编码
    OutputFormat format = OutputFormat.createPrettyPrint();
    File xmlFile = new File(filePath);
    format.setEncoding("UTF-8");
    XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFile), format);
    writer.write(document);
    writer.close();
}

在这里插入图片描述

1.修改节点和内容

我们可以尝试着修改一下版本号

/**
 * 更新节点
 */
public static void updateXML(String filePath) throws Exception {
    Document document = getDocument(filePath);
    if (document != null) {
        // 修改指定节点
        List elementList = document.selectNodes("/project/parent/version");
        Iterator iterator = elementList.iterator();
        while (iterator.hasNext()) {
            Element element = (Element) iterator.next();
            element.setText("3.16");
        }
        //设置输出编码
        OutputFormat format = OutputFormat.createPrettyPrint();
        File xmlFile = new File(filePath);
        format.setEncoding("UTF-8");
        XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFile), format);
        writer.write(document);
        writer.close();
    }
}

在这里插入图片描述

3.删除节点

代码如下(示例):

/**
 * 删除节点
 */
public static void removeElement(String filePath) throws Exception {
    Document document = getDocument(filePath);
    if (document != null) {
        // 修改指定节点
        List elementList = document.selectNodes("/project/parent");
        Iterator iterator = elementList.iterator();
        while (iterator.hasNext()) {
            Element parentElement = (Element) iterator.next();
            Iterator parentIterator = parentElement.elementIterator();
            while (parentIterator.hasNext()) {
                Element childElement = (Element) parentIterator.next();
                if (childElement.getName().equals("version")) {
                    parentElement.remove(childElement);
                }
            }
        }
        //设置输出编码
        OutputFormat format = OutputFormat.createPrettyPrint();
        File xmlFile = new File(filePath);
        format.setEncoding("UTF-8");
        XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFile), format);
        writer.write(document);
        writer.close();
    }
}

4.新增节点

代码如下(示例):

/**
 * 新增节点
 */
public static void addElement(String filePath) throws Exception {
    Document document = getDocument(filePath);
    if (document != null) {
        // 修改指定节点
        List elementList = document.selectNodes("/project/parent");
        Iterator iterator = elementList.iterator();
        while (iterator.hasNext()) {
            Element parentElement = (Element) iterator.next();
            Iterator parentIterator = parentElement.elementIterator();
            List<String> nodeList = new ArrayList<>();
            while (parentIterator.hasNext()) {
                Element childElement = (Element) parentIterator.next();
                nodeList.add(childElement.getName());
            }
            if (!nodeList.contains("version")){
                Element versionElement = parentElement.addElement("version");
                versionElement.setText("1.1");
                break;
            }
        }
        //设置输出编码
        OutputFormat format = OutputFormat.createPrettyPrint();
        File xmlFile = new File(filePath);
        format.setEncoding("UTF-8");
        XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFile), format);
        writer.write(document);
        writer.close();
    }
}

5.获取遍历

代码如下(示例):

/**
     * 获取文档
     */
    public static Document getDocument(String filename) {
        File xmlFile = new File(filename);
        Document document = null;
        if (xmlFile.exists()) {
            try {
                SAXReader saxReader = new SAXReader();
                document = saxReader.read(xmlFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return document;
    }

/**
 * 遍历根节点
 */
public static Document iteratorNode(String filename) {
    Document document = getDocument(filename);
    if (document != null) {
        Element root = document.getRootElement();
        System.out.println(root.getName());
        Iterator iterator = root.elementIterator();
        while (iterator.hasNext()) {
            Element childElement1 = (Element) iterator.next();
            System.out.println("\t-"+childElement1.getName());
            Iterator iterator1 = childElement1.elementIterator();
            while (iterator1.hasNext()){
                Element childElement2 = (Element) iterator1.next();
                System.out.println("\t\t-"+childElement2.getName());
            }
        }
    }
    return document;
}

测试

然后我们来输出一下信息

public static void main(String[] args) throws Exception {
   String file = "D:\\test.xml";
//        createXML(file);
//        updateXML(file);
//        removeElement(file);
//        addElement(file);
    Document d = iteratorNode(file);
    System.out.println(d);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值