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 文件来配置日志级别、输出路径等信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UI自动化测试中,一个完整的断言应所需要考虑的问题

在UI自动化测试中,一个完整的断言应全面覆盖用户界面(UI)的功能性、交互性和视觉正确性。以下是断言需要包含的核心内容及详细说明: 一、基础元素验证 存在性断言 验证元素存在于DOM中示例代码(Python + Selenium):assert driver.find_element(By.ID, "submit_btn&…

[Java][Leetcode middle] 238. 除自身以外数组的乘积

第一个想法是&#xff1a; 想求出所有元素乘积&#xff0c;然后除以i对应的元素本书&#xff1b;这个想法是完全错误的&#xff1a; nums[I] 可能有0题目要求了不能用除法 第二个想法是&#xff1a; 其实写之前就知道会超时&#xff0c;但是我什么都做不到啊&#xff01; 双…

5.16本日总结

一、英语 背诵list30&#xff0c;复习list1 二、数学 学习14讲部分内容&#xff0c;订正30讲13讲题目 三、408 学习计网5.3知识点&#xff0c;完成5.1&#xff0c;5.2题目并订正 四、总结 高数对于基本定义概念类题目掌握不好&#xff0c;做题时往往不会下手&#xff0c…

深度学习---常用优化器

优化器一&#xff1a;Adam&#xff08;Adaptive Moment Estimation&#xff09; 一、适用场景总结&#xff08;实践导向&#xff09; 场景是否推荐用 Adam说明小模型训练&#xff08;如 MLP、CNN&#xff09;✅✅✅稳定、无需复杂调参&#xff0c;适合快速实验初学者使用或结构…

SparkSQL 连接 MySQL 并添加新数据:实战指南

SparkSQL 连接 MySQL 并添加新数据&#xff1a;实战指南 在大数据处理中&#xff0c;SparkSQL 作为 Apache Spark 的重要组件&#xff0c;能够方便地与外部数据源进行交互。MySQL 作为广泛使用的关系型数据库&#xff0c;与 SparkSQL 的结合可以充分发挥两者的优势。本文将详细…

基于对抗性后训练的快速文本到音频生成:stable-audio-open-small 模型论文速读

Fast Text-to-Audio Generation with Adversarial Post-Training 论文解析 一、引言与背景 文本到音频系统的局限性&#xff1a;当前文本到音频生成系统性能虽佳&#xff0c;但推理速度慢&#xff08;需数秒至数分钟&#xff09;&#xff0c;限制了其在创意领域的应用。 研究…

AI画图Stable Diffusion web UI学习笔记(中)

本文记录讲解AI画图工具Stable Diffusion web UI的部分基本使用方法&#xff0c;以便进行学习。AI画图Stable Diffusion web UI学习笔记分为上、中、下三篇文章。 我在 AI画图Stable Diffusion web UI学习笔记&#xff08;上&#xff09;_webui-CSDN博客 这篇文章中介绍了Stabl…

安全与智能的双向奔赴,安恒信息先行一步

人类文明发展的长河中&#xff0c;每一次技术变革都重新书写了安全的定义。 从蒸汽机的轰鸣到电力的普及&#xff0c;从互联网的诞生到人工智能的崛起&#xff0c;技术创新与变革从未停止对于安全的挑战。今天&#xff0c;我们又站在一个关键的历史节点&#xff1a;AI大模型的…

【Reality Capture 】02:Reality Capture1.5中文版软件设置与介绍

文章目录 一、如何设置中文二、如何设置界面分区三、如何切换二三维窗口四、工具栏有多个视图选项卡RealityCapture是虚幻引擎旗下一款三维建模软件,跟我们常用的三维建模软件一样,可以从图像或激光扫描中创建实景三维模型和正射影像等产品。可用于建筑、测绘、游戏和视觉特效…

真题卷001——算法备赛

蓝桥杯2024年C/CB组国赛卷 1.合法密码 问题描述 小蓝正在开发自己的OJ网站。他要求用户的密码必须符合一下条件&#xff1a; 长度大于等于8小于等于16必须包含至少一个数字字符和至少一个符号字符 请计算一下字符串&#xff0c;有多少个子串可以当作合法密码。字符串为&am…

17.three官方示例+编辑器+AI快速学习webgl_buffergeometry_lines

本实例主要讲解内容 这个Three.js示例展示了如何使用BufferGeometry创建大量线段&#xff0c;并通过**变形目标(Morph Targets)**实现动态变形效果。通过随机生成的点云数据&#xff0c;结合顶点颜色和变形动画&#xff0c;创建出一个视觉效果丰富的3D线条场景。 核心技术包括…

InfluxDB 2.7 连续查询实战指南:Task 替代方案详解

InfluxDB 2.7 引入了 Task 功能&#xff0c;作为连续查询&#xff08;CQ&#xff09;的现代替代方案。本文详细介绍了如何使用 Task 实现传统 CQ 的功能&#xff0c;包括语法解析、示例代码、参数对比以及典型应用场景。通过实际案例和最佳实践&#xff0c;帮助开发者高效迁移并…

Pytorch张量和损失函数

文章目录 张量张量类型张量例子使用概率分布创建张量正态分布创建张量 (torch.normal)正态分布创建张量示例标准正态分布创建张量标准正态分布创建张量示例均匀分布创建张量均匀分布创建张量示例 激活函数常见激活函数 损失函数(Pytorch API)L1范数损失函数均方误差损失函数交叉…

大模型在数据分析领域的研究综述

大模型在业务指标拆解中的应用场景与方法研究 随着人工智能技术的快速发展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;在数据分析领域的应用日益广泛。尤其是在业务指标拆解这一复杂任务中&#xff0c;大模型展现了其独特的价值和潜力。通过对多维…

JAVA:ResponseBodyEmitter 实现异步流式推送的技术指南

1、简述 在许多场景下,我们希望后端能够以流式、实时的方式推送数据给前端,比如消息通知、日志实时展示、进度条更新等。Spring Boot 提供了 ResponseBodyEmitter 机制,可以让我们在 Controller 中异步地推送数据,从而实现实时流式输出。 样例代码:https://gitee.com/lh…

Spring Boot循环依赖的陷阱与解决方案:如何打破“Bean创建死循环”?

引言 在Spring Boot开发中&#xff0c;你是否遇到过这样的错误信息&#xff1f; The dependencies of some of the beans in the application context form a cycle 这表示你的应用出现了循环依赖。尽管Spring框架通过巧妙的机制解决了部分循环依赖问题&#xff0c;但在实际开…

如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?

阅读和解析 TCC&#xff08;Tiny C Compiler&#xff09; 的源代码需要对编译器的基本工作原理和代码结构有一定的了解。以下是分步骤的指南&#xff0c;帮助你更高效地学习和理解 TCC 的源代码&#xff1a; 1. 前置知识准备 C 语言基础&#xff1a;TCC 是用 C 语言编写的&…

Java Set系列集合详解:HashSet、LinkedHashSet、TreeSet底层原理与使用场景

Java Set系列集合详解&#xff1a;HashSet、LinkedHashSet、TreeSet底层原理与使用场景 一、Set系列集合概述 1. 核心特点 无序性&#xff1a;存取顺序不一致&#xff08;LinkedHashSet除外&#xff09;。唯一性&#xff1a;元素不重复。无索引&#xff1a;无法通过索引直接访…

解决 CentOS 7 镜像源无法访问的问题

在国内使用 CentOS 系统时&#xff0c;经常会遇到镜像源无法访问或者下载速度慢的问题。尤其是默认的 CentOS 镜像源通常是国外的&#xff0c;如果你的网络环境无法直接访问国外服务器&#xff0c;就会出现无法下载包的情况。本文将介绍如何修改 CentOS 7 的镜像源为国内镜像源…

云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(上)

在云应用/服务的 5 层架构里&#xff0c;数据库服务层稳坐第 4 把交椅&#xff0c;堪称其中的 “硬核担当”。它的复杂程度常常让人望而生畏&#xff0c;不少人都将它视为整个架构中的 “终极挑战”。 不过&#xff0c;也有人觉得可扩展存储系统才是最难啃的 “硬骨头”&#…