美文网首页知识库
dom4j解析xml文件

dom4j解析xml文件

作者: Java_Evan | 来源:发表于2024-01-12 19:35 被阅读0次

xml是可扩展的标记语言。

主要作用有:

  1. 用来保存数据,而且这些数据具有自我描述性。
  2. 它还可以作为项目或模块的配置文件。
  3. 还可以作为网络传输数据的格式。

编写xml文件内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 以上内容是xml文档声明
 version:版本
 encoding:文件编码
 standalone(yes/no):文件是否独立
 -->

<users> <!-- users根标签,表示可以存放多组用户信息(类似于声明了一个数组,存放多个元素) -->
    <!-- 双标签方式:标签成对出现 -->
    <!-- id="1001":xml属性值必须加双引号 -->
    <user id="1001"> <!-- user标签描述用户信息, id表示用户编号 -->
        <name>张三</name> <!-- name标签描述用户姓名 -->
        <age>18</age>  <!-- age标签描述用户年龄 -->
        <!-- 特殊字符:&lt;表示< &gt;表示> -->
        <address>
            &lt;广州&gt;
        </address>
    </user>
    <user id="1002">
        <name>李四</name>
        <age>20</age>
        <!-- [CDATA]文本块:告诉xml文本块内容不需要解析,只是纯文本 -->
        <address>
            <![CDATA[
                <<西安>>
            ]]>
        </address>
    </user>
    <!-- 单标签描述用户信息方式 -->
    <user id="1003" name="王五" age="22" address="北京" />
</users>

xml解析技术

  • 不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析。
  • document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)。
  • dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。 Java 对 dom 技术解析标记也做了实现(jdom,java处理xml文件的类库)。
  • 第三方的解析:
    dom4j 又对 jdom 进行了封装。
    这个 dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析 xml 文件。

dom4j解析
dom4j是使用java语言编写用于处理XML文件的第三方库。
由于 dom4j 是第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j 的 jar 包。
官网下载地址:https://dom4j.github.io/
官网地址下载慢可以去到这里下载:
https://www.alipan.com/s/GSLAghthhn9
提取码: b3t4

创建User实体类

User实体类,用于xml解析后数据保存到User类的实例中输出到控制台。

public class User implements Serializable {
    @Serial
    private static final long serialVersionUID = -425623628991L;

    private int id;
    private String name;
    private int age;
    private String address;

    public User(int id) {
        this.id = id;
    }

    public User(int id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

解析xml文件

@Test
public void test1() {
    //1.创建一个SAXReader对象的输入流,读取xml文件,生成Document对象
    SAXReader reader = reader = new SAXReader();;
    try {
        //2.读取xml文件,返回一个Document
        var doc = reader.read(new File("src/user.xml"));
        //System.out.println(doc);
        //3. 通过Document对象获取xml的根标签
        var root = doc.getRootElement();
        // Element.asXML() 它将当前元素转换成为 String 对象
        //System.out.println(root.asXML());
        //4.根据根元素对象,获取所有的user子标签对象
        //获取到当前元素下指定的子元素集合
        List<Element> users = root.elements("user");
        //5.遍历每个user子标签对象,然后获取到user标签对象内的每一个元素
        for (var e : users) {
            //System.out.println(e.asXML());
            //获取user标签下的name标签对象
            var nameText = e.element("name");
            //获取name标签中的文本内容
            String name = nameText.getText();
            //elementText():直接获取标签中的文本内容
            var age = e.elementText("age");
            //elementText():直接获取标签中的文本内容
            var address = e.elementText("address");
            //获取user标签中的id属性值
            String id = e.attributeValue("id");
            System.out.println(id);
            //创建User类将获取到的标签内容传给到User类中的属性再通过user类获取
            User user = new User(Long.parseLong(id), name, Integer.parseInt(age), address);
            System.out.println(user);
        }
    } catch (DocumentException e) {
        e.printStackTrace();
    }
}

相关文章

网友评论

    本文标题:dom4j解析xml文件

    本文链接:https://www.haomeiwen.com/subject/wcaxodtx.html