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>
在这个例子中,age
是 person
元素的一个属性,值为 30
。
5. 嵌套元素
元素可以嵌套在其他元素中,这形成了层次结构。如下:
XML
<note>
<to>Alice</to>
<from>Bob</from>
<message>Hello!</message>
</note>
这里,<note>
是根元素,包含了 to
、from
和 message
等子元素。
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
是根元素,包含了几个子元素:to
、from
、heading
和body
。- 每个元素用标签包裹了相应的数据内容。
总结
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