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.pswp.cn/pingmian/87174.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87174.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87174.shtml

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

相关文章

qml实现 裁剪进度条

我们需要实现一个垂直进度条效果&#xff0c;但使用图片裁剪的方式。具体需求&#xff1a; 1. 图片位置固定&#xff0c;容器对齐其左边和下边&#xff0c;宽度和图片相同。 2. 容器背景透明&#xff0c;调整裁剪容器的高度&#xff0c;使其有高度进度条的感觉&#xff08;从下…

Dify 工作流全栈解析:从零构建你的 AI 应用流程引擎

AI工作流的导言&#xff1a; 工作流系统&#xff08;Workflow System&#xff09;是 Dify 的核心组成部分&#xff0c;它通过可视化编程界面支持创建复杂的 AI 应用程序。用户可以将不同的功能块连接起来&#xff0c;从而设计出用于处理数据、与 AI 模型交互、管理条件以及执行…

上下位机通讯规则

0&#xff1a;事由 最近开发&#xff0c;上位机Qt与下位机通讯的时候发现通讯规则有些不一样&#xff0c;这里简单记录一下 。所有代码基于元宝生成&#xff0c;属于伪代码不保证真实可用&#xff0c;啊但是逻辑是这么个逻辑。 1&#xff1a;底层通讯规则 以STM32向上位机通讯…

创建平衡二叉树C++

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 平衡二叉树&#xff1a;每个节点的左右子树高度差不超过1 class Solution { public:TreeNode* dfs(vector<int>& nums, int left, int right){if(l…

海光の初体验

背景 八张K100的风扇已经将近一年没转过了…早在今年4月29日&#xff0c;Qwen3正式发布并全部开源8款「混合推理模型」。作为Qwen系列中的最新一代大型语言模型&#xff0c;Qwen3在推理、指令遵循、工具调用、多语言能力等方面进行了全面增强。海光DCU&#xff08;Deep Comput…

场外交易(OTC)财富管理系统开发及解决方案报告

——跨境金融科技赋能机构客户新增长 一、OTC市场现状与机构业务痛点 1. 政策机遇与市场扩容 “北向互换通”期限延长&#xff1a;2025年7月1日&#xff0c;中国外汇交易中心联合香港交易所将利率互换合约期限延长至30年&#xff0c;首日交易规模达15.3亿元&#xff0c;填补超…

pytorch底层原理学习--JIT与torchscript

文章目录 0 目的1 TorchScript1.1 语言特性的限定性1.2 设计目的&#xff1a;模型表达的专注性 2pytorch JIT&#xff08;Just-in-time compilation)2.1pytorch JIT定义2.1pytorch JIT整个过程&#xff1a;1. 前端转换层&#xff1a;生成静态计算图2. 中间表示层&#xff08;IR…

Ubuntu+Nginx+php+SQLite3+typecho手动搭建个人博客

零.Ubuntu环境 一.安装nginx 使用以下指令进行nginx web服务器安装&#xff1a; apt-get install nginx 如果提示找不到安装包&#xff0c;也可以更新一下系统的apt环境包&#xff1a; sudo apt update 安装完成后&#xff0c;可以使用以下指令查看nginx是否处于激活状态&#…

网络协议概念与应用层

1.概念 1.1 例子 点外卖 上述这个过程,就是自定义协议 自定义协议,具体的方式也是非常灵活的 2.几种开发中更常见的格式 2.1xml 上古时期的组织数据的格式 通过标签来组织数据 xml的优势:让数据的可读性变得更好了 劣势:标签写起来繁琐,传输的时候也占用更多网络带宽 2.2…

pytorch学习—7.处理多维特征的输入

2. 线性模型 3.梯度下降算法 4.反向传播(用pytorch算梯度) 5.用pytorch实现线性回归 6.logistic回归 7.处理多维特征的输入_哔哩哔哩_bilibili 7.1代码复现: import numpy as np import torch import matplotlib.pyplot as plt# 1. 获取数据集 xy_data = np.lo

AI助手“智普清言”《三元》(Python)诗解

文本逻辑解清晰&#xff0c;诗意对应技法轻。 笔记模板由python脚本于2025-07-01 06:54:55创建&#xff0c;本篇笔记适合喜欢python三元语句的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Pytho…

本地RAG实战:用Spring AI+Ollama+DeepSeek+ChromaDB增强文档问答

本文手把手教你在本地部署RAG系统&#xff1a; 用 Spring AI 整合 Ollama&#xff08;运行DeepSeek中文模型&#xff09;ChromaDB 存储本地文档&#xff08;PDF/TXT&#xff09;向量Java程序实现&#xff1a;文档解析 → 语义检索 → 增强生成 最终效果&#xff1a;模型回答更准…

Python 数据分析:DataFrame,生成,用字典创建 DataFrame ,键值对数量不一样怎么办?

目录 1 示例代码2 欢迎纠错3 论文写作/Python 学习智能体------以下关于 Markdown 编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右S…

Java 并发编程的 CAS(Compare and Swap)是什么?

CAS&#xff08;Compare and Swap&#xff0c;比较并交换&#xff09; 并非 Java 语言特有的概念&#xff0c;而是现代计算机硬件提供的一条核心原子指令。在 Java 并发编程中&#xff0c;它扮演着“幕后英雄”的角色&#xff0c;是构建高性能、无锁并发工具&#xff08;如原子…

【UnityAssetBundle】AssetBundle打包

AssetBundle生成AB包资源文件方式&#xff1a; Unity编辑器开发&#xff0c;自定义打包工具&#xff1b;官方提供好的打包工具&#xff0c;Asset Bundle Browser 打包 选择一个资源&#xff0c;new一个压缩包名称或选择一个压缩包名称 点击Window->AssetBundle Browser&…

Hush Puppies大中华区鞋类业务移交品牌方继续经营

据悉&#xff0c;随着百丽集团运营的暇步士&#xff08;Hush Puppies&#xff09;大中华区鞋类授权的到期&#xff0c;暇步士&#xff08;Hush Puppies&#xff09;鞋类业务已开始运营权移交。其中线上渠道授权于2025年6月30日正式到期&#xff0c;线下渠道将于2025年12月31日前…

解释LLM怎么预测下一个词语的

解释LLM怎么预测下一个词语的 通过上文词的向量进行映射 在Transformer架构的大语言模型(如GPT系列、BERT等)中,词语会先被转化为词向量。在预测下一个词时,模型会基于之前所有词的向量表示(并非仅仅上一个词,但上一个词的向量是重要信息来源之一)进行计算。 以GPT-2…

DAY 49 CBAM注意力

目录 DAY 49 CBAM注意力1.通道注意力模块复习2.空间注意力模块3.CBAM的定义作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 DAY 49 CBAM注意力 1.通道注意力模块复习 2.空间注意力模块 3.CBAM的定义 import torch import torch.nn …

【网络】Linux 内核优化实战 - net.ipv4.conf.all.rp_filter

目录 net.ipv4.conf.all.rp_filter 参数详解一、参数基本概念二、参数取值及含义三、反向路径过滤的工作原理四、配置示例与注意事项五、与其他参数的关联六、总结 net.ipv4.conf.all.rp_filter 参数详解 一、参数基本概念 net.ipv4.conf.all.rp_filter 是 Linux 内核中用于控…

ElementUI el-select多选下拉框,回显数据后无法重新选择和修改

问题 ElementUI el-select多选下拉框&#xff0c;回显数据后无法重新选择和修改&#xff0c;点击选择和删除都没有反应&#xff0c;页面也没有报错 方案一 网上搜出来的基本上都是这个解决办法&#xff0c;但是我设置后没有生效&#xff0c;还是无法选择和修改 原因 下拉框数…