XML & DOM4j

XML & DOM4j

XML(可扩展标记语言)是一种标记语言,用于描述数据的结构和内容。XML被设计用来传输和存储数据,同时也可以作为配置文件或用于表示文档结构。

文档:https://www.w3school.com.cn/xml/index.asp

1. XML 语法

示例:

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student>
        <id>1</id>
        <name>Alice</name>
        <age>20</age>
    </student>
    <student>
        <id>2</id>
        <name>Bob</name>
        <age>22</age>
    </student>
</students>

一个 XML 文件分为如下几部分内容

  • 文档声明
  • 元素
  • 属性
  • 注释
  • CDATA 区 、特殊字符

文档声明

XML 声明放在 XML 文档的第一行,例如:<?xml version=“1.0” encoding=“UTF-8”?>

XML 声明由以下几个部分组成:

  • version - -文档符合 XML1.0 规范
  • encoding - -文档字符编码,比如"utf-8"

元素

XML 元素指 XML 文件中出现的标签,一个标签分为开始标签和结束标签。

注意点:

1)每个XML文档必须有且只有一个根元素。

2)根元素是一个完全包括文档中其他所有元素的元素。

3)根元素的起始标记要放在所有其他元素的起始标记之前。

4)根元素的结束标记要放在所有其他元素的结束标记之后。

5)XML 元素指 XML 文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式:

  • 包含标签体:<a>www.sohu.cn</a>
  • 不含标签体的:<a></a>, 简写为:<a/>

6)一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套。

XML 元素命名规则:

  • 区分大小写,例如,<P>和<p>是两个不同的标记。
  • 不能以数字开头。
  • 不能包含空格。
  • 名称中间不能包含冒号(:)。
  • 如果标签单词需要间隔,建议使用下划线 比如 <book_title>hello</book_title>

属性

<Student ID="100">
    <Name>TOM</Name>
</Student>

其中ID就为Student的属性。

注意点:

1)属性值用双引号(“)或单引号(‘)分隔。(如果属性值中有’,用"分隔;有”,用’分隔)

2) 一个元素可以有多个属性,它的基本格式为:<元素名 属性名=“属性值”>

3)特定的属性名称在同一个元素标记中只能出现一次。

4)属性值不能包括 & 字符

注释

<!--这是一个注释- ->

CDATA 节

有些内容不想让解析引擎执行,而是当作原始内容处理(即当做普通文本),可以使用 CDATA 包括起来,CDATA 节中的所有字符都会被当作简单文本,而不是 XML 标记。

语法:

<![CDATA[
这里可以把你输入的字符原样显示,不会解析 xml
]]>

转义字符

对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。

请添加图片描述

2. DOM4j

Dom4j 是一个简单、灵活的开放源代码的库(用于解析/处理 XML 文件)。

与 JDOM 不同的是,dom4j 使用接口和抽象基类,虽然 Dom4j 的 API 相对要复杂一些,但它提供了比 JDOM 更好的灵活性。

文档:https://dom4j.github.io/javadoc/1.6.1/

快速入门

// 得到解析器
SAXReader saxReader = new SAXReader();
// 获取document对象
Document document = saxReader.read("src/student.xml");
// 获取根元素
Element rootElement = document.getRootElement();
// 获取所有student元素
List<Element> student = rootElement.elements("student");
for (Element element : student) {
    // 获取name
    Element name = element.element("name");
    // 获取age
    Element age = element.element("age");
    // 获取id属性
    Attribute id = element.attribute("id");
    System.out.println(id.getText() + " " + name.getText() + ":" + age.getText());
}

增删改操作

try {
    // 读取XML文件
    File file = new File("students.xml");
    SAXReader reader = new SAXReader();
    Document document = reader.read(file);

    // 添加新的学生信息
    Element root = document.getRootElement();
    Element newStudent = root.addElement("student");
    newStudent.addElement("id").setText("4");
    newStudent.addElement("name").setText("David");
    newStudent.addElement("age").setText("23");
    newStudent.addElement("gender").setText("M");

    // 删除指定ID的学生信息
    String idToDelete = "2";
    for (Element student : root.elements("student")) {
        if (student.elementText("id").equals(idToDelete)) {
            root.remove(student);
            break;
        }
    }

    // 修改指定ID的学生信息的年龄
    String idToUpdate = "3";
    Element root = document.getRootElement();
    for (Element student : root.elements("student")) {
        if (student.elementText("id").equals(idToUpdate)) {
            Element ageElement = student.element("age");
            ageElement.setText("25");
            break;
        }
    }

    // 写入更新后的XML文件
    OutputFormat format = OutputFormat.createPrettyPrint();
    XMLWriter writer = new XMLWriter(new FileWriter("students_updated.xml"), format);
    writer.write(document);
    writer.close();

} catch (Exception e) {
    e.printStackTrace();
}

相关推荐

  1. Neo4j介绍

    2024-04-04 12:22:02       59 阅读
  2. 安装Neo4j

    2024-04-04 12:22:02       62 阅读
  3. log4j学习

    2024-04-04 12:22:02       61 阅读
  4. Neo<span style='color:red;'>4</span><span style='color:red;'>J</span>

    Neo4J

    2024-04-04 12:22:02      45 阅读
  5. neo4j

    2024-04-04 12:22:02       45 阅读
  6. Log<span style='color:red;'>4</span><span style='color:red;'>j</span>

    Log4j

    2024-04-04 12:22:02      35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 12:22:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 12:22:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 12:22:02       82 阅读
  4. Python语言-面向对象

    2024-04-04 12:22:02       91 阅读

热门阅读

  1. Python 自动备份文件到远程目录(Windows适用)

    2024-04-04 12:22:02       30 阅读
  2. Python程序设计 单例模式

    2024-04-04 12:22:02       34 阅读
  3. 【Qt】使用Qt实现Web服务器(十):前端基础

    2024-04-04 12:22:02       32 阅读
  4. Qt5.14.2 揭秘Qt日志神器高效诊断程序潜在隐疾

    2024-04-04 12:22:02       26 阅读
  5. C++4.2

    2024-04-04 12:22:02       30 阅读