XML文件(超详细):XML文件概念、作用、写法、如何用程序解析XML、写入XML、dom4j框架、DTD文档、schema文档

server/2024/11/25 16:04:02/

目录

1、什么是XML文件?和properties属性文件有什么区别?和txt文本文件有什么区别?

2、XML文件的用途

3、XML的格式

4、如何解析XML文件

5、如何写入XML文件

6、约束XML的书写格式

6.1 DTD文档-约束书写格式,但是不能约束具体的数据类型

6.2 schema文档-约束书写格式,可以约束具体的数据类型


1、什么是XML文件?和properties属性文件有什么区别?和txt文本文件有什么区别?

XML(EXtensible Markup Lannguange,可扩展标记语言)

我们都知道txt文件,是一个普通的文本文件,里面的内容可以随便写,格式也很随意。所以我们读取里面有对应关系的数据需要挨个解析,较为麻烦。

而Properties的书写格式就有格式要求,文件内容都是一些键值对,方便我们去获取键值对里面的信息,例如账号密码等信息。

而XML文件则是存储复杂的数据结构和数据关系,本质是一种数据的格式。例如存储多个用户的用户名密码时,用Properties属性文件则显得乏力了。

来张图演示一下:

我上一篇详细解释properties属性文件的概念、作用、读取和写入方式,不清楚的同学可以先了解一下:

Properties文件:Properties属性文件键值对的获取方法、如何写入信息到Properties属性文件、Properties对象的用法-CSDN博客

2、XML文件的用途

1、作为系统的配置文件

2、作为一种特殊的数据结构,在网络中进行传输

举一个例子

我们在淘宝买东西,下单时填了收货地址。

顺丰快递平台收到你的订单信息,按照你的地址给你发货。

但是你是在淘宝下单的时候才填的地址,并没有去顺丰平台填地址。

所以这个地址信息就是淘宝平台通过XML文件形式封装好通过网络传输给顺丰平台的。

3、XML的格式:

注意一:<?xml version="1.0" encoding="utf-8" ?>这行是必须要写的,且必须放在首行(前面有注释都不行哦)。

表示版本为1.0,以utf-8字符集来编码

注意二:根标签只能有一个,子标签可以有多个

注意三:标签是成对存在的,记得嵌套正确

<?xml version="1.0" encoding="utf-8" ?><!--Users是一个根标签,必须只能有一个,而Users里面的子属性可以有多个-->
<!--根标签名字随意取-->
<Users><user id="1"><name>张三</name><age>18</age><address>广州</address></user><userAttribute>都是爱学习的人</userAttribute><user id="2"><name>李四</name><age>25</age><address>哈尔滨</address></user><!--以下是带有大于号小于号等特殊字符的写法--><special><![CDATA[5 > 2 && 3 < 5]]></special><!--特殊字符用法二--><special>  5 &gt; 2 &amp;&amp; 3 &lt; 5 </special>
</Users>

XML文件可以在浏览器中查看,我们打开浏览器看到,我们写的特殊字符的格式是我们所预期的

语法规则:

4、如何解析XML文件?

对于文件的读取和解析,相信很多同学第一反应就是IO流。但是太过于繁琐啦,难度也较大!

所以我们建议使用Dom4j(第三方研发)框架来解析XML文件,方便且好用!

我是maven工程,直接引入依赖即可

   <dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version></dependency>

 (需要解析的XML文件对象在本文第3点的格式样例中,同学们参照那个来。)

第一步:创建一个dom4j提供的解析器对象

第二步:将xml文件读取到我们的内存当中

第三步:xml文档信息已经解析到内存当中,我们可以操作这个文档信息了。

java">public class XMLRead {public static void main(String[] args) throws Exception {//创建一个dom4j提供的解析器对象SAXReader saxReader = new SAXReader();//将xml文件读取到我们的内存当中,获取到这个Document 对象之后就可以读取里面的数据了Document document = saxReader.read("src/main/resources/xmlConfigTest.xml");//1、获取根元素对象里面的所有信息,下面根据这个根元素对象去获取想要的数据Element rootElement = document.getRootElement();System.out.println(rootElement.getName());System.out.println("-----");//2、获取根元素里面的一级子元素List<Element> elements = rootElement.elements();for (Element element : elements){System.out.println(element.getName());}System.out.println("-----");//3、获取第一个user子元素里面的指定数据Element name = rootElement.element("user").element("name");System.out.println(name.getText());Element address = rootElement.element("user").element("address");System.out.println(address.getText());System.out.println("-----");//4、获取第一个user子元素里面的指定数据(方式二)Element firstUser = rootElement.element("user");System.out.println(firstUser.elementText("age"));System.out.println("-----");//5、获取含有特殊字符的第一个special属性数据Element special = rootElement.element("special");System.out.println(special.getTextTrim());}
}

可以对照代码里面的注释来看我们打印出来的日志,非常清晰明了,也非常简单好用!

5、如何写入XML文件

在实际应用中,我们不建议用domj4来把数据写到XML文件去,因为需要创建很多对象,非常繁琐。

建议直接把程序里的数据拼接成XML格式,然后用IO流写出去!

java">public class XMLWriter {public static void main(String[] args) throws IOException {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n");stringBuilder.append("<School>\r\n");stringBuilder.append("\t<ClassRool>" + "北京大学" + "</ClassRool>\r\n");stringBuilder.append("\t<StudentNum>" +  "1000" + "</StudentNum>\r\n");stringBuilder.append("</School>\r\n");try (BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("src/main/resources/xmlWriterTest.xml"))) {bufferedWriter.write(stringBuilder.toString());}catch (Exception e){e.printStackTrace();}}
}

可以看到,我们将数据自己拼接成xml格式写入到了xml文件中。

6、约束XML的书写格式

我们解析XML文件格式时,应该要清楚原本的格式才能解析,所以我们需要给XML的书写格式进行约束,防止接收到的文件格式不正确而导致解析出错的情况。

做了约束之后,是不能随意更改XML书写格式的,这样方便接收方解析文件

6.1 DTD文档-约束书写格式,但是不能约束具体的数据类型

我直接截图黑马老师的课件给大家演示一下

6.2 schema文档-约束书写格式,可以约束具体的数据类型

我直接截图黑马老师的课件给大家演示一下

这就是我对XML文件相关知识的理解,希望能帮到大家,有问题的地方欢迎大家一起讨论!

后续会不断更新作品,欢迎大家一起讨论学习。❤❤❤


http://www.ppmy.cn/server/144832.html

相关文章

前端安全问题汇总

1、Nginx相关 1.1、升级Nginx版本 及时升级Nginx版本&#xff0c;新版本包含对旧版本的漏洞修复 1.2、版本号隐藏 版本号的显示也被扫描软件识为一种不安全的行为 2、具有不安全、不正确或缺少SameSite属性的Cookie 可以直接在Nginx下设置 location / {add_header Set-C…

C++特殊类设计(不能被拷贝的类、只能在堆上创建对象的类、不能被继承的类、单例模式)

C特殊类设计 在实际应用中&#xff0c;可能需要设计一些特殊的类对象&#xff0c;如不能被拷贝的类、只能在堆上创建对象的类、只能在栈上创建对象的类、不能被继承的类、只能创建一个对象的类&#xff08;单例模式&#xff09;。 1. 不能被拷贝的类 拷贝只会发生在两个场景…

云讷科技Kerloud无人飞车专利发布

云讷科技Kerloud无人飞车获得了“一种室内外两用的四旋翼无人飞车”的实用新型专利证书&#xff0c;作为科教社区第一款四旋翼飞车&#xff0c;这项技术结合了无人机和无人车的优势&#xff0c;提供了一种能够在多种环境下使用的多功能飞行器。 这项设计的优势如下&#xff…

[AutoSar]BSW_Diagnostic_007 BootLoader 跳转及APP OR boot response 实现

目录 关键词平台说明背景一、Process Jump to Bootloader二、相关函数和配置2.1 Dcm_GetProgConditions()2.2 Dcm_SetProgConditions() 三、如何实现在APP 还是BOOT 中对10 02服务响应3.1 配置3.2 code 四、报文五、小结 关键词 嵌入式、C语言、autosar、OS、BSW、UDS、diagno…

git使用(一)

git使用&#xff08;一&#xff09; 为什么学习git?两种版本控制系统在github上创建一个仓库&#xff08;repository&#xff09;windows上配置git环境在Linux上配置git环境 为什么学习git? 代码写了好久不小心删了&#xff0c;可以使用git防止&#xff0c;每写一部分代码通…

mysql-分析并解决mvcc更新丢失问题

多版本并发控制&#xff08;Multi-Version Concurrency Control, MVCC&#xff09;是现代数据库系统中常用的一种并发控制机制&#xff0c;用于提高并发性能和数据一致性。然而&#xff0c;MVCC 本身并不能完全解决更新丢失问题。让我们详细探讨一下这个问题的原因和背景。 更…

Hive 函数(实例操作版2)

数据脱敏函数 -- 演示数据脱敏函数 -- mask_hash: 返回指定字符串的hash编码 select mask_hash(binzi);-- 拓展 --将查询回的数据&#xff0c;大写字母转换为X&#xff0c;小写字母转换为x&#xff0c;数字转换为n。 select mask("abc123DEF"); -- xxxnnnXXX--自定…

乐鑫ESP32物联网方案,设备人机交互技术应用,启明云端乐鑫代理商

随着技术的不断革新&#xff0c;人机交互已经从简单的输入输出指令&#xff0c;发展到能够理解人类意图的复杂系统。从刚开始的命令行界面到今天的触摸屏和语音识别&#xff0c;人机交互的每一次进步都提升了我们与机器的互动效率。 人机交互的核心在于理解人类的行为和需求&a…