当前位置: 首页 > news >正文

XML简要介绍

实际上现在的Java Web项目中更多的是基于springboot开发的,所以很少再使用xml去配置项目。所以我们的目的就是尽可能快速的去了解如何读懂和使用xml文件,对于DTD,XMLSchema这类约束的学习可以放松,主要是确保自己知道这里面的大致使用方式,约定方式,不太需要过于深入细节。尤其是当ai快速发展,首要的是能够看懂,知道作用和地位。

约束

下面我们已pom.xml文件为例

上述使用的就是Schema的方式作为当前xml文件的约束。(约束实际上就是体现了现代编程中约定大于配置的思想)
下面是传统的DTD的约束方式对xml文件约束

上述是使用mybits定义的约束来对于当前mapper.xml文件进行约束。在实际项目中也可以自定义一定的DTD约束,使用STYSTEM在XML文件中引入约束,当然也可以使用嵌入的方式实现DTD约束。

由于向我上面说的,很少使用自己的XML文件,最多是对于当前项目中需要的内容进行配置,然而这些配置的内容更多的都是一些已有的约束,所以首要的是能够看懂约束。
DTD约束的语法规则很简单,最多的就是一些元素,属性,元素类型,属性类型,分清楚记住就可以。

xml文件使用场景

在后端开发项目中,XML 文件就像一个 “信息宝库”,被广泛应用于各种场景,下面给你介绍常见的使用场景:

1. 配置文件

  • 框架配置:许多后端框架,如 Spring、Struts 等,都使用 XML 文件来进行配置。以 Spring 框架为例,在 Spring 的 XML 配置文件中,可以定义 Bean(即应用中的组件),声明它们之间的依赖关系 。比如,你要配置一个 UserService 的 Bean,可以这样写:

xml

<bean id="userService" class="com.example.service.UserService"><property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.example.dao.UserDao"/>

这里通过 XML 文件明确了 UserService 依赖于 UserDao,并将它们作为 Bean 纳入 Spring 的管理。这样的配置方式使得项目结构更加清晰,并且在不修改代码的情况下,能够方便地调整 Bean 的属性和依赖关系。

  • 数据库连接配置:XML 文件也常用于配置数据库连接参数。在 Java 项目中,可能会有一个 database.xml 文件,在其中定义数据库的 URL、用户名、密码等信息。例如:
<database><url>jdbc:mysql://localhost:3306/mydb</url><username>root</username><password>password</password>
</database>

应用程序在启动时读取这个 XML 文件,获取数据库连接信息,从而连接到数据库。这样做的好处是,如果数据库相关信息发生变化,只需修改 XML 文件,而无需在代码中到处查找和修改硬编码的数据库连接字符串。

2. 数据存储与传输

  • 数据持久化:XML 可以用来存储数据,特别是对于一些简单的结构化数据。例如,一个小型的博客系统可能会用 XML 文件来存储文章信息。每篇文章可以表示为一个 XML 元素,文章的标题、作者、内容等作为子元素。
<article><title>后端开发的魅力</title><author>张三</author><content>后端开发是构建应用程序的重要部分...</content>
</article>

这样的 XML 文件便于数据的存储和后续的读取与解析。

  • 数据交换:在不同系统之间进行数据传输时,XML 是一种常用的格式。比如,一个电商系统与物流系统进行对接,电商系统将订单信息以 XML 格式发送给物流系统。订单的基本信息、商品列表等都可以清晰地在 XML 结构中体现。物流系统接收到 XML 数据后,按照约定的格式进行解析,获取所需信息。这种方式的优势在于 XML 具有良好的可读性和跨平台性,不同语言开发的系统都能够方便地处理 XML 数据。

3. Web 服务相关

  • Web 服务描述:在 SOAP(Simple Object Access Protocol) Web 服务中,使用 WSDL(Web Services Description Language)文件来描述 Web 服务的接口、操作、输入输出参数等信息,而 WSDL 文件本质上就是一种 XML 文件。例如,一个提供天气查询的 Web 服务,其 WSDL 文件会详细描述查询天气的方法(如传入城市名称,返回天气信息)以及相关的数据类型等,客户端可以根据这个 WSDL 文件生成调用该 Web 服务的代码。
  • JAX - WS 配置:在 Java 的 JAX - WS(Java API for XML - based Web Services)开发中,也会用到 XML 文件进行配置。例如,可以通过 XML 文件来配置 Web 服务的端点地址、绑定协议等信息,使得 Web 服务的部署和配置更加灵活。

4. 文档表示

  • 文档结构化:XML 可以用于创建结构化的文档,例如电子书、技术规范文档等。以电子书为例,可以用 XML 来标记章节、段落、标题、图片等元素,实现文档的结构化存储和展示。这样不仅便于文档的管理和编辑,还能通过不同的样式表(如 XSLT)将 XML 文档转换为不同格式(如 HTML、PDF)进行展示。
  • 元数据描述:项目中的一些元数据,如关于项目的描述、作者信息、版本历史等,可以用 XML 文件来记录。这些元数据对于项目的管理、维护以及其他开发者了解项目背景都非常有帮助。

学习 XML 相关知识,可以参考 W3School 的 XML 教程,它提供了从基础语法到实际应用的详细讲解。在实践项目方面,可以尝试开发一个简单的配置管理系统,使用 XML 文件来存储配置信息,并编写代码读取和修改这些配置,以此加深对 XML 在项目中应用

xml的可替代方案

在现代项目中,XML 文件的使用频率确实有所下降,主要有以下几个原因:

XML 使用频率下降的原因

  1. 语法繁琐:XML 的语法相对复杂,标签众多,需要严格遵循开闭标签的规则,书写和阅读成本较高。例如,一个简单的键值对配置,如果用 XML 表示:
<configuration><property><name>server.port</name><value>8080</value></property>
</configuration>

相比之下,同样的内容使用更简洁的格式(如 JSON 或 YAML)会清晰很多。
2. 数据解析性能:XML 解析时,无论是采用 DOM(Document Object Model)方式将整个文档加载到内存构建树形结构,还是 SAX(Simple API for XML)基于事件驱动的解析方式,在性能上都不如一些轻量级的数据格式。特别是在处理大数据量时,DOM 方式可能会导致内存占用过高,而 SAX 虽然内存占用低,但编程复杂度较高。
3. 与编程语言的集成度:对于一些动态类型语言或者强调简洁开发的语言和框架,XML 的使用不够便捷。例如在 Python 的一些 Web 开发框架中,开发者更倾向于使用简单易读的配置方式,XML 的复杂结构与这些语言的开发风格不太契合。

替代 XML 的常用技术

  1. JSON(JavaScript Object Notation)
    • 特点:JSON 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它基于 JavaScript 的对象字面量表示法,具有良好的跨语言特性。例如,上述配置用 JSON 表示为:
{"server.port": 8080
}
  • 应用场景:在 Web 应用的前后端数据交互中广泛使用。前端 JavaScript 可以很方便地将 JSON 数据解析为对象进行处理,后端各种编程语言也都有丰富的库来处理 JSON 数据。例如在基于 Spring Boot 的后端项目与 Vue.js 前端项目进行数据交互时,JSON 是默认的数据传输格式。在微服务架构中,服务之间的数据通信也常使用 JSON。
  1. YAML(YAML Ain't Markup Language)
    • 特点:以简洁的语法和强大的表现力著称,采用缩进表示层级关系,可读性非常好。例如,同样的配置用 YAML 表示:
server:port: 8080
  • 应用场景:在容器编排工具如 Docker Compose 和 Kubernetes 中,YAML 用于定义容器化应用的配置和部署信息。在一些配置管理工具(如 Ansible)中,YAML 也用于编写配置文件,定义自动化任务和配置参数等。同时,在一些云原生应用开发中,YAML 被广泛用于描述应用的各种配置和元数据。

  1. Properties 文件
    • 特点:是一种简单的键值对配置文件格式,主要用于 Java 项目的配置。它的语法非常简单,每一行是一个键值对,以等号 “=” 分隔。例如:
server.port=8080
  • 应用场景:在 Java 的一些小型项目或者作为 Java 应用中特定模块的配置文件,Properties 文件使用方便,适合配置一些简单的参数。例如在 Java 的日志框架(如 Log4j)中,可以使用 Properties 文件来配置日志级别、输出路径等信息。

相关文章:

  • 「Mac畅玩AIGC与多模态40」开发篇35 - 用 Python 开发服务对接 SearxNG 与本地知识库
  • Qt—用SQLite实现简单的注册登录界面
  • 【解决分辨数字】2021-12-16
  • oracle linux 95 升级openssh 10 和openssl 3.5 过程记录
  • 基于matlab的D2D 功率控制仿真
  • 2025云智算技术白皮书
  • Go语言交替打印问题及多种实现方法
  • go-中间件的使用
  • 初识——QT
  • 第八节第三部分:认识枚举、枚举的作用和应用场景
  • React学习———CSS Modules(样式模块化)
  • CSS:三大特性
  • 黑马点评面试前复习
  • 事件驱动架构:从传统服务到实时响应的IT新风潮
  • MySQL 高可用
  • 光谱相机的空间分辨率和时间分辨率
  • 聊一聊接口测试的一致性如何处理?
  • h5,原生html,echarts关系网实现
  • 金融问答系统:如何用大语言模型打造高精度合规的金融知识引擎
  • 数据库故障排查指南:从入门到精通
  • 技术派|威胁F-35、击落“死神”,胡塞武装防空战力如何?
  • 中国进出口银行:1-4月投放制造业中长期贷款超1800亿元
  • 自然资源部:不动产登记累计化解遗留问题房屋2000多万套
  • 黑龙江省政府副秘书长许振宇,拟任正厅级领导
  • 株洲一重病妇女被要求本人到银行取款时去世?当地警方:正在处理
  • 上海锦江乐园摩天轮正在拆除中,预计5月底6月初拆完