Java练习(二十六):dom4j解析XML文件, 创建XML文件

本文介绍Dom4j的基本概念及API使用方法,并通过三个示例演示如何利用Dom4j进行XML文件的解析与创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. Dom4j知识点

1.1 什么是Dom4j

1.2 API接口

1.3 常见API

2. 示例一:用List方式来解析xml

2.1 .xml文件

2.2 Dom4jDemo1类,实现用List的方式解析xml

3. 示例二:使用Iterator迭代器的方式来解析xml

3.1 .xml文件

3.2 Dom4jDemo2类,实现用Iterator的方式解析xml

4.  示例三:创建xml文件,并往文件中写入内容

4.1 .xml文件

4.2 Dom4jDemo3类,创建xml文件,并往文件中写入内容


【写在前面】

在之前的练习中,使用到了dom4j来解析xml文件。这里单独起一篇文章,再次练习dom4j的简单用法。前文:Java练习(十八):编写代码,简单模拟Spring容器管理实例

参考该文章,自己手动编写了一遍代码,推荐看原博:java中采用dom4j解析xml文件

1. Dom4j知识点

1.1 什么是Dom4j

dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。

1.2 API接口

1.3 常见API

1)class org.dom4j.io.SAXReader

read  提供多种读取xml文件的方式,返回一个Domcument对象

2)interface org.dom4j.Document

iterator  使用此法获取node

getRootElement  获取根节点

3)interface org.dom4j.Node

getName  获取node名字,例如获取根节点名称为bookstore

getNodeType  获取node类型常量值,例如获取到bookstore类型为1——Element

getNodeTypeName  获取node类型名称,例如获取到的bookstore类型名称为Element

4)interface org.dom4j.Element

attributes  返回该元素的属性列表

attributeValue  根据传入的属性名获取属性值

elementIterator  返回包含子元素的迭代器

elements  返回包含子元素的列表

5)interface org.dom4j.Attribute

getName  获取属性名

getValue  获取属性值

6)interface org.dom4j.Text

getText  获取Text节点值

7)interface org.dom4j.CDATA

getText  获取CDATA Section值

8)interface org.dom4j.Comment

getText  获取注释 

2. 示例一:用List方式来解析xml

2.1 .xml文件

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <database id="1">
        <url>127.0.0.1</url>
        <port>8080</port>
        <login>Sheryl</login>
        <password>123</password>
    </database>>
	
	<database id="2">
        <url>127.0.0.2</url>
        <port>8088</port>
        <login>Kate</login>
        <password>456</password>
    </database>>
</config>

2.2 Dom4jDemo1类,实现用List的方式解析xml

package com.my.demo;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.List;

//用list方式来解析xml
public class Dom4jDemo1 {

    public static void main(String[] args) throws DocumentException {
        SAXReader reader = new SAXReader(); //创建dom4j解析器
        Document document = reader.read(new File("C:\\Users\\pearl\\Desktop\\road\\2022\\conFile\\demo.xml"));  //加载document对象

        Element root = document.getRootElement();   //拿到根节点
        List<Element> childrenElements = root.elements();   //拿到所有子节点
        for(Element child: childrenElements){
            //情况1: 不知道节点的属性名
            List<Attribute> attributeList = child.attributes();
            for(Attribute attr: attributeList){
                System.out.println(attr.getName() + ":" + attr.getValue());
            }
            System.out.println("---------------");

            //情况2:知道节点的属性名
//            System.out.println("id: " + child.attributeValue("id"));

            //情况3:不知道子元素名
            List<Element> elementList = child.elements();
            for(Element ele: elementList){
                System.out.println(ele.getName() + ":" + ele.getText());
            }

            System.out.println("************************************************************");

            //情况4:知道子元素名
//            System.out.println("URL: " + child.elementText("url"));
//            System.out.println("PORT: " + child.elementText("port"));
//            System.out.println("LOGIN: " + child.elementText("login"));
//            System.out.println("PASSWORD: " + child.elementText("password"));
        }
    }

}

 运行结果

id:1
---------------
url:127.0.0.1
port:8080
login:Sheryl
password:123
************************************************************
id:2
---------------
url:127.0.0.2
port:8088
login:Kate
password:456
************************************************************

Process finished with exit code 0

3. 示例二:使用Iterator迭代器的方式来解析xml

3.1 .xml文件

同上,略

3.2 Dom4jDemo2类,实现用Iterator的方式解析xml

package com.my.demo;


import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.Iterator;
import java.util.List;

public class Dom4jDemo2 {
    public static void main(String[] args) throws DocumentException {
        SAXReader reader = new SAXReader(); //创建dom4j解析器
        Document document = reader.read(new File("C:\\Users\\pearl\\Desktop\\road\\2022\\conFile\\demo.xml"));  //加载document对象
        Element root = document.getRootElement();   //拿到根节点

        Iterator iterator = root.elementIterator();   //拿到所有子节点
        while (iterator.hasNext()){
            Element element = (Element) iterator.next();

            //情况1: 不知道节点的属性名
            Iterator attrIt = element.attributeIterator();
            while (attrIt.hasNext()){
                Attribute a = (Attribute) attrIt.next();
                System.out.println(a.getValue());
            }

            //情况2:知道节点的属性名
//            System.out.println("id:" + element.attributeValue("id"));

            System.out.println("---------------");

            //情况3:不知道子元素名
            Iterator eleIt = element.elementIterator();
            while (eleIt.hasNext()){
                Element e = (Element) eleIt.next();
                System.out.println(e.getName() + ": " + e.getText());
            }

            //情况4:知道子元素名
//            System.out.println("URL: " + element.elementText("url"));
//            System.out.println("PORT: " + element.elementText("port"));
//            System.out.println("LOGIN: " + element.elementText("login"));
//            System.out.println("PASSWORD: " + element.elementText("password"));

            System.out.println("************************************************************");
        }
    }

}

运行结果:

1
---------------
url: 127.0.0.1
port: 8080
login: Sheryl
password: 123
************************************************************
2
---------------
url: 127.0.0.2
port: 8088
login: Kate
password: 456
************************************************************

Process finished with exit code 0

4.  示例三:创建xml文件,并往文件中写入内容

4.1 .xml文件

同上,略

4.2 Dom4jDemo3类,创建xml文件,并往文件中写入内容

package com.my.demo;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import java.io.*;

public class Dom4jDemo3 {

    public static void main(String[] args) throws IOException {
        Document doc = DocumentHelper.createDocument();
        //增加根节点
        Element root = doc.addElement("config");

        //增加子节点
        Element database1 = root.addElement("database");
        Element url1 = database1.addElement("url");
        Element port1 = database1.addElement("port");
        Element login1 = database1.addElement("login");
        Element password1 = database1.addElement("password");

        Element database2 = root.addElement("database");
        Element url2 = database2.addElement("url");
        Element port2 = database2.addElement("port");
        Element login2 = database2.addElement("login");
        Element password2 = database2.addElement("password");

        //在上面创建的子节点中添加具体属性
        database1.addAttribute("id", "3");
        url1.setText("127.0.0.1");
        port1.setText("8081");
        login1.setText("Sheryl666");
        password1.setText("123456");

        database2.addAttribute("id", "4");
        url2.setText("127.0.0.1");
        port2.setText("8082");
        login2.setText("Kate666");
        password2.setText("654321");

        //实例化输出格式对象
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        //设置输出编码
        outputFormat.setEncoding("UTF-8");
        //创建需要写入的File对象
        File file = new File("C:\\Users\\pearl\\Desktop\\road\\2022\\conFile\\demo2.xml");
        //生成XMLWriter对象
        XMLWriter xmlFile = new XMLWriter(new FileOutputStream(file), outputFormat);

        //将xml内容写入文件
        xmlFile.write(doc);
    }
}

运行结果,生成demo2.xml文件,内容如下:

补充:Maven项目下,pom.xml中添加dom4j依赖,如下:

        <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值