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

Javaweb - 7 xml

XML 是EXtensible Markup Language 的缩写,翻译过来就是可扩展标记语言。即,XML 和 HTML 一样,都是标记语言,也就是说,它们的基本语法都是标签。

 特点:

        1. 可扩展:即 XML 是允许自定义格式的。但!这并不代表我们就可以随便写。

        2. 在 XML 基本语法规范的基础上,我们使用的第三方应用程序、框架等,会通过 XML 约束的方式,强制配置文件中可以写什么,和怎么写~

        3. XML 基本语法的定位点:我们并不需要从零开始,一行一行的写 XML 文档,而是,在第三方应用程序、框架的已提供的配置文件的基础上,进行修改即可~(要改成什么样子,取决于我们的具体需求,而怎么改,则取决于 XML 基本语法,和具体的 XML 约束)

目录

常见的配置文件的类型

DOM4J 进行 XML 解析

完!


常见的配置文件的类型

1. properties:例如 druid 连接池就是使用其作为配置文件的。

语法规范:

        1. 由键值对组成

        2. 键和值之间的符号的等号

        3. 每一行都必须顶格写,前面不能由空格之类的其他符号

示例:

补充:由于我们为了文件分类清晰,创建了一个 resources 文件夹,存放 jdbc.properties 文件,但我们的 properties 此时就无法与 src 产生关系。这样就相当于把 properties 文件放进了 src 啦~

由于我们编写的代码会有不同的环境,所以也需要不同的配置。比如:1. 在我们程序员自己的电脑。2. 在公司的测试服务器。3. 正式的商用服务器

这样就会显得非常杂乱,层次不清晰

这时候就需要我们的 XML 了

2. XML:例如 Tomcat 就是使用 XML 文件作为配置文件

语法规范:

        1. XML 的基本语法和 HTML 的基本语法如出一辙。XML 语法 + HTML 约束 = HTML 语法。在逻辑上,HTML 属于是 XML 的子集。

        2. XML 文档声明:这部分基本上就是固定格式:<?xml version="1.0" encoding="UTF-8"?>;

        3. 根标签:根标签有且只能有一个

        4. 标签关闭:开始标签和结束标签都必须成对出现,单标签在标签内关闭

        5. 标签嵌套:标签可以嵌套,但是不能交叉嵌套

        6. 属性:属性必须有值,属性值必须加引号,单双都可~

两相对比,XML 更有层次,清晰一些~

xml 也是有约束的:约束用于限定 XML 内部能编写的内容,在编写 XML 的时候,编辑工具会根据约束来进行提示。XML 约束主要包括 DTD(简单,上手快,约束没有 Schema 细致) 和 Schema(复杂,上手慢,约束要比 DTD 更加细致) 两种。

但 XML 约束并不需要我们自己写,可以 idea 直接生成~

 

这就是 idea 自动为我们生成的 xml 限制,看倒数第二行的一长串的地址末尾,为 .xsd 就表明的 Schema 限制~ 如果是 .dtd 就是 DTD 限制

加了限制之后,我们就无法再随意填写标签了~

3. YAML/YML:例如 SpingBoot 就是使用 YAML 作为配置文件

4. JSON:通常用来做文件传输,也可以用来做前端或者移动端的配置文件

DOM4J 进行 XML 解析

        1. 导入 jar 包 dom4.jar

        2. 创建解析对象(SAXReader)

        3. 解析 XML 获得 Document 对象

        4. 获取根节点 RootElement

        5. 获取根节点下的字节点

我们首先要导入 jar 包(下载 jar 包的流程我在前面文章有提到:jar 包如何下载-CSDN博客)

然后,我们就可以在 src 中创建类,来secessionist DOM4J 对 XML 进行解析~

package test;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.testng.annotations.Test;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;@Test
public class TestDOM4j_demo {public void testRead() throws FileNotFoundException, DocumentException {// 读取 jdbc.xml 配置文件,获得 document 对象SAXReader saxReader = new SAXReader();// 1. 直接获得 document 对象// 这种方法需要确定 xml 文件的路径,可以用第二种反射的方法//saxReader.read(new FileInputStream("E:\\java_new\\java_code\\xml-demo\\resources\\jdbc.xml"));// 2. 通过类加载器来获得指向字节码根路径下的指定文件的输入流InputStream resourceAsStream = TestDOM4j_demo.class.getClassLoader().getResourceAsStream("jdbc.xml");// 其实真正实际操作的时候,很少我们直接读取 xml 文件,框架种都会自带~// 通过输入流获得配置文件,解析成一个 dom 对象Document document = saxReader.read(resourceAsStream);// 从 document 对象上获取配置文件种的信息/*document 树:Node 节点Element 元素节点Attribute 属性节点Test 文本节点*/Element rootElement = document.getRootElement();System.out.println(rootElement.getName());// 获取元素下的子元素List<Element> elements = rootElement.elements();for (Element element : elements) {System.out.println("\t" + element.getName());// 从元素上获取属性Attribute idAttribute = element.attribute("id");System.out.println("\t\t" + idAttribute.getName() + "=" + idAttribute.getValue());// 继续读取子元素List<Element> eles = element.elements();for (Element ele : eles) {System.out.println("\t\t" + ele.getName() + ":" + ele.getText());}}}
}

完!

http://www.lqws.cn/news/566335.html

相关文章:

  • 【智能协同云图库】智能协同云图库第三弹:基于腾讯云 COS 对象存储—开发图片模块
  • 日常 AI 工具汇总
  • Oracle 递归 + Decode + 分组函数实现复杂树形统计进阶(第二课)
  • 深入剖析 Linux 内核网络核心:sock.c 源码解析
  • 阿里云ACP-数据湖和机器学习
  • 解锁Ubuntu安装:从新手到高手的通关秘籍
  • Java 大视界 -- 基于 Java 的大数据分布式存储在科研大数据归档与长期保存中的应用(328)
  • 从UI设计到数字孪生实战演练:打造智慧交通的综合管理平台
  • 鸿蒙 Swiper 组件解析:轮播交互与动画效果全指南
  • 基于STM32的数字频率计设计
  • LoRA训练-理论基础
  • 大模型在恶性心律失常预测及治疗方案制定中的应用研究
  • 智慧水务:未来城市水务管理的创新实践与科技飞跃
  • Go 中的 range 表达式详解:遍历数组、切片、字符串与 Map
  • Docker错误问题解决方法
  • Wpf布局之Canvas面板!
  • 使用 em 单位的好处,以及 em、rem、px 的区别
  • Django ORM 2. 模型(Model)操作
  • 【记录】服务器多用户共享Conda环境——Ubuntu24.04
  • 利用imx6ull板学习裸机arm板开发(6.22-6.24)
  • 商业秘密保护新焦点:企业如何守护核心经营信息?
  • Python商务数据分析——Matplotlib 数据可视化学习笔记
  • Windows环境下C语言汇编语言编辑器及环境安装
  • Windows 环境下设置 RabbitMQ 的 consumer_timeout 参数
  • NoSQL与Redis、HBase、分布式系统详解
  • 深入理解 Dubbo 负载均衡:原理、源码与实践
  • C++文件操作
  • 测试第六讲-开发测试阶段划分
  • 学习记录:DAY35
  • 【FreeRTOS-任务通知】