XML标记语言

XML 简介

XML(可扩展标记语言) 是一种标记语言,设计用于存储和传输数据。与 HTML 相比,XML 主要用于描述数据的内容,而不是展示数据的外观。它由万维网联盟(W3C)制定,是一种跨平台、系统无关的语言。

XML的核心特性之一是它的可扩展性,允许用户根据需要创建自定义标签,从而使得XML可以在各种不同的领域应用,如文档存储、数据交换、配置文件等。XML的设计目的是便于人类和机器读取与解析,它被广泛用于网络应用、数据库通信以及各种文件格式。

XML 基本格式

XML 文件是通过一系列的元素来定义的,元素通常通过开始标签和结束标签来包裹数据。以下是 XML 文件的一些基本格式和规则:

1. XML 声明

每个 XML 文档可以包含一个声明,声明版本以及编码方式,通常在文件的第一行。常见形式是:

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
2. 根元素

每个 XML 文档必须包含一个且只有一个根元素,它是所有其他元素的容器。例如:

XML 复制代码
<root> <!-- 其他元素 --> </root>

根标签的类型是可以自定义的,XML 并没有限制根标签的具体名称。

3. 元素(标签)

XML 元素是数据的核心组成部分,用开始和结束标签包裹。标签名称是区分大小写的,标签名称可以自定义。如下:

XML 复制代码
<name>John</name>

在这个例子中,<name> 是开始标签,</name> 是结束标签,内容是 John

4. 属性

XML 元素可以包含属性,用于描述元素的额外信息。属性写在开始标签中,格式为 name="value"

XML 复制代码
<person age="30">John</person>

在这个例子中,ageperson 元素的一个属性,值为 30

5. 嵌套元素

元素可以嵌套在其他元素中,这形成了层次结构。如下:

XML 复制代码
<note>
  <to>Alice</to>
  <from>Bob</from>
  <message>Hello!</message>
</note>

这里,<note> 是根元素,包含了 tofrommessage 等子元素。

6. 注释

XML 可以包含注释,用于在文档中添加说明性文字,不会被解析器处理。注释使用 <!-- --> 包裹:

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

7. 空元素

XML 元素可以是空的,也就是说没有内容。空元素可以使用自闭合标签来表示:

<br/>

8. CDATA 区块

CDATA(Character Data)区块用于包含不能解析为 XML 标签的特殊字符,通常用于嵌入脚本或需要保留的文本内容。CDATA 区块写法如下:

<![CDATA[ 这里的内容不会被解析器当作标签处理 ]]>

XML 文件示例

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Alice</to>
  <from>Bob</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting tomorrow!</body>
</note>

在这个例子中:

  • note 是根元素,包含了几个子元素:tofromheadingbody
  • 每个元素用标签包裹了相应的数据内容。

总结

XML 通过一系列标签和属性来描述数据,格式严谨、结构清晰。它不仅可以在不同系统之间传输数据,还易于扩展和自定义,因此被广泛用于数据存储和通信的场景。

自定义XML:

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!--根标签只能有一个
第一行永远都是<?xml version="1.0" encoding="UTF-8"?>
xmL是有约束,约束用于限定xml内就能编写的内容
-->
<jdbk>
    <dev>
        <username></username>
        <password></password>
        <driver></driver>
        <url></url>
    </dev>
    <test>
        <username></username>
        <password></password>
        <driver></driver>
        <url></url>
    </test>
    <formal>

    </formal>
</jdbk>
  • 根标签 <jdbk>:整个文档的主标签,表示一个大系统的配置。
  • <dev>:开发环境的配置信息。
  • <test>:测试环境的配置信息。
  • <formal>:正式环境的配置信息,虽然目前为空,但在实际部署时需要填写。

这三个标签分别用于不同的环境配置,包含了用户名、密码、驱动和URL等信息。这种结构通常用于描述不同环境下的数据库或服务连接配置。、

解析XML:

通过 DOM4J 库,你可以方便地读取 XML 文件中的内容,并对其进行操作,如读取属性、获取子元素、遍历数据等。

java 复制代码
package DOM4J;

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

import java.io.InputStream;
import java.util.List;

public class Test {
    public static void testREad() throws DocumentException {
        // 读取jdbc.xml配置文件,获取document对象
        SAXReader saxReader = new SAXReader();
        //通过类加载器获得指向字节码根路径下的指定文件的输入流
        InputStream resourcesASStream = Test.class.getClassLoader().getResourceAsStream("jdbk.XML");
        // 通过输入流获得配置文件,解析成-个dom对象
        Document document =  saxReader.read(resourcesASStream);
        // 从document对象上获发配置文件中的信息

        // 从document对象上获取根元素
        Element rootElement =  document.getRootElement();


        // 获取元素下的子元素
        List<Element> elements = rootElement.elements();
        for (Element element : elements) {
            System.out.print(element.getName()+" ");

            // 获取属性节点
            Attribute id = element.attribute("id");
            System.out.println(id.getName() + "=" + id.getValue());

            // 继续读取子元素
            List<Element> elements1 = element.elements();
            for (Element element1 : elements1) {
                System.out.println(element1.getName() + " " + element1.getText());
            }
        }
    }

    public static void main(String[] args) throws DocumentException {
        testREad();
    }
}

输出:

java 复制代码
dev id=001
username 
password 
driver 
url 
test id=002
username 
password 
driver 
url 
formal id=003
相关推荐
程序员大金2 分钟前
基于SpringBoot+Vue+MySQL的智能物流管理系统
java·javascript·vue.js·spring boot·后端·mysql·mybatis
茜茜西西CeCe18 分钟前
移动技术开发:登录注册界面
java·gitee·gradle·android studio·安卓·移动技术开发·原生安卓开发
linux_lzj_cainiao18 分钟前
准备招银社招记录
java
杨诚实23 分钟前
20240912软考架构-------软考161-165答案解析
数据库·架构
不是编程家23 分钟前
C++ 第三讲:内存管理
java·开发语言·c++
尸僵打怪兽24 分钟前
软考(中级-软件设计师)(0919)
java·c语言·数据库·计算机网络·软考·多媒体·软件设计师
Liii40335 分钟前
【ARM】Cache深度解读
java·arm开发·spring
litGrey1 小时前
Maven国内镜像(四种)
java·数据库·maven
丶白泽2 小时前
重修设计模式-结构型-桥接模式
java·设计模式·桥接模式
o独酌o2 小时前
递归的‘浅’理解
java·开发语言