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 元素,文章的标题、作者、内容等作为子元素。

    <title>后端开发的魅力</title> <author>张三</author> <content>后端开发是构建应用程序的重要部分...</content>

这样的 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)会清晰很多。

  1. 数据解析性能 :XML 解析时,无论是采用 DOM(Document Object Model)方式将整个文档加载到内存构建树形结构,还是 SAX(Simple API for XML)基于事件驱动的解析方式,在性能上都不如一些轻量级的数据格式。特别是在处理大数据量时,DOM 方式可能会导致内存占用过高,而 SAX 虽然内存占用低,但编程复杂度较高。

  2. 与编程语言的集成度:对于一些动态类型语言或者强调简洁开发的语言和框架,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 文件来配置日志级别、输出路径等信息。
相关推荐
Seven976 分钟前
了解GC吗?什么是GC?
java
雷渊7 分钟前
微服务中为什么要设计不同的服务和不同的数据对象,体现了一个什么样的设计思想?
后端
Edingbrugh.南空21 分钟前
Flink ClickHouse 连接器维表源码深度解析
java·clickhouse·flink
ddfa123422 分钟前
XML 笔记
xml·服务器
无奈何杨36 分钟前
CoolGuard风控中新增移动距离和移动速度指标
前端·后端
掘金-我是哪吒41 分钟前
分布式微服务系统架构第157集:JavaPlus技术文档平台日更-Java多线程编程技巧
java·分布式·微服务·云原生·架构
飞翔的佩奇1 小时前
Java项目:基于SSM框架实现的忘忧小区物业管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
java·数据库·mysql·vue·毕业设计·ssm框架·小区物业管理系统
程序员爱钓鱼1 小时前
Go语言泛型-泛型约束与实践
前端·后端·go
寻月隐君1 小时前
保姆级教程:Zsh + Oh My Zsh 终极配置,让你的 Ubuntu 终端效率倍增
linux·后端·命令行
程序员爱钓鱼1 小时前
Go语言泛型-泛型对代码结构的优化
后端·google·go