一、前言
在编程中,XML(可扩展标记语言)是一种常用于存储和交换数据的标记语言,它具有良好的人机可读性和通用性。在本文中,我们将探讨XML
的各个方面,包括XML的介绍与用途、语法规则、语义约束、Java中的XML解析以及XPath路径表达式。
二、内容
2.1 XML介绍与用途
什么是 XML
XML的全称是EXtensible Markup Language
,可扩展标记语言。与HTML类似,XML也是通过标签来描述数据的格式和结构,但XML更加通用,不仅用于网页,还用于数据的存储和交换。
XML示例:
王五
18
170
XML vs HTML
XML
和 HTML
都使用标签来描述文档结构,但它们有一些关键区别:
大二
5班
大二
6班
首页
主要区别:
- XML是通用的数据描述语言,而HTML用于呈现文档。
- XML强调数据的结构和内容,而HTML强调文档的呈现和布局
2.2 XML的语法规则
XML 文档结构
XML文档必须遵循一定的结构规则:
- 第一行必须是XML声明,包含版本号和字符集信息。
- XML文档有且只有一个根节点。
- XML标签的书写规则与HTML相同。
XML 声明
XML 声明说明 XML文档 的基本信息,包括版本号与字符集,写在 XML第一行。
其中:
version
代表版本号,可以是 1.0 或 1.1encoding UTF-8
设置字符集,用于支持中文
合法的标签名
XML
标签名必须遵循一些规则:
abc
数学期末
班级
照片
适当的注释与缩进
为了提高XML文档的可读性,建议使用注释和缩进:
王五
18
180
合理使用属性
XML标签可以包含属性,用于提供额外的信息:
Chapter 1
处理特殊字符
在标签体中出现 "" 等特殊字符可能会破坏文档结构,需要特殊处理:
解决方案:
使用实体引用。
可以使用实体引用来代替特殊字符:
实体引用 | 对应符号 | 说明 |
---|---|---|
< |
|
大于 |
& |
& |
和号 |
' |
' |
单引号 |
" |
" |
双引号 |
使用CDATA标签。
CDATA标签用于包含不应由XML解析器解析的文本数据:
比如:
bold text.]]>
有序的子元素
在多层嵌套的子元素中,标签的前后顺序应保持一致,以维护数据的结构完整性。
2.3 XML语义约束
XML文档结构正确,但可能不是有效的。XML语义约束用于规定XML文档中允许出现哪些元素。
例如,员工档案
XML
中绝不允许出现”植物品种” 标签。XML
语义约束就是用于规定XML
文档中允许出现哪些元素。
XML语义约束有两种定义方式:DTD
与 XML Schema
。
Document Type Definition
DTD
(Document Type Definition
,文档类型定义)是一种简单的语义约束方式,用于规定XML文档的结构。
DTD
文件的扩展名为 .dtd
。
比如:
...
DTD 定义节点
利用 DTD
中的标签,我们可以定义 XML
文档中允许出现的节点及其数量。
比如:
- 定义
hr
节点下只允许出现1
个employee
子节点:
employee
节点下必须包含name
、age
、salary
和department
节点,并按顺序出现:
- 定义
name
标签体只能是文本,#PCDATA
代表文本元素:
DTD 定义节点数量
如某个子节点需要多次重复出现,则需要在子节点后增加相应的描述符:
hr
节点下最少出现 1 个employee
子节点。
hr
节点下可出现0...n
个employee
子节点。
hr
节点下最多出现1
个employee
子节点。
XML 引用 DTD 文件
在 XML
中使用 标签来引用
DTD
文件。
书写格式如下:
举个例子:
XML Schema
XML Schema(XML模式)是一种用于定义XML文档结构和数据类型的替代DTD的方案。与DTD相比,XML Schema提供了更强大和灵活的工具来描述XML文档的结构和语义。
XML Schema支持丰富的数据类型,如字符串、整数、日期、布尔值等。允许我们定义更复杂的数据约束,如最小值、最大值、正则表达式模式等。同时, XML Schema文档本身是一个XML文档,因此具有更好的自描述性,提供了更强大的命名空间支持,并允许我们定义元素和属性的子元素、顺序、出现次数等规则,从而更精确地描述文档结构。
举个例子:
这个XML Schema为XML文档定义了严格的结构和数据类型规则,确保XML文档符合人力资源管理系统的要求。XML文档必须遵循这些规则,否则将被视为无效。
2.4 Java 解析 XML
DOM 文档对象模型
DOM是一种用于解析XML的模型,将XML文档视为树形结构,可以方便地遍历和修改XML文档。
Dom4j
Dom4j是一个开源的Java库,用于解析和操作XML文档。它易于使用,性能优异,并提供了丰富的功能。
- Dom4j 将 XML 视为 Document 对象。
- XML 标签被 Dom4j 定义为 Element 对象。
利用 Dom4j 遍历 XML
// 导入Dom4j相关类
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class XMLParser {
public static void main(String[] args) {
try {
// 创建SAXReader对象
SAXReader reader = new SAXReader();
// 读取XML文件
Document document = reader.read("hr.xml");
// 获取根节点
Element root = document.getRootElement();
// 遍历子元素
for (Element employee : root.elements("employee")) {
String name = employee.elementText("name");
String age = employee.elementText("age");
System.out.println("Name: " + name + ", Age: " + age);
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
利用 Dom4j 更新 XML
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class XMLUpdater {
public static void main(String[] args) {
try {
// 创建空的XML文档
Document document = DocumentHelper.createDocument();
// 创建根节点
Element root = document.addElement("employees");
// 创建子节点
Element employee = root.addElement("employee");
employee.addElement("name").setText("李四");
employee.addElement("age").setText("25");
// 将XML写入文件
XMLWriter writer = new XMLWriter(new FileWriter("new_hr.xml"));
writer.write(document);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.5 XPath 路径表达式
XPath 路径表达式
XPath是一种用于在XML文档中查找数据的语言,它允许通过路径表达式定位XML文档中的元素。
- 掌握
XPath
可以极大的提高在提取数据时的开发效率。- 学习
XPath
本质就是掌握各种形式表达式的使用技巧。
XPath 基本表达式
最常用的基本表达式:
/
:从根节点开始选取//
:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置element
:选取指定名称的元素@attribute
:选取指定名称的属性text()
:选取元素的文本内容
XPath 基本表达式案例
比如:
XML Basics
John Doe
Java Programming
Jane Smith
示例XPath表达式:
/books
:选取根元素books/books/book
:选取根元素下的book元素//author
:选取所有author元素/books/book[1]
:选取第一个book元素/books/book/title/text()
:选取第一个book元素的 title 文本内容
XPath 谓语表达式
谓语表达式用于过滤元素,可以根据条件来选择元素:
比如:
/books/book[author='John Doe']
:选取作者为'John Doe'的book元素/books/book[price>20]
:选取价格大于20的book元素
三、总结
本文介绍了XML的各个方面,包括XML的基本介绍与用途、语法规则、语义约束、Java中的XML解析以及XPath路径表达式。总的来说,XML是一种强大的数据交换格式,掌握它将有助于处理和管理各种数据源。