XML(eXtensible Markup Language)
eXtensible Markup Language(可扩展标记语言)是一种用来存储和传输数据的文本格式。
具体定义
- XML 可扩展标记语言,是用于标记电子文件使其具有结构性的标记语言,可以
用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的
源语言。 - XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素。与
HTML 不同,XML 不使用预定义标签,因此可以为标签指定描述数据的名称。 - 在 Web 历史的早期,XML 作为一种数据传输格式非常流行(“AJAX”中的“X”
即代表“XML”),但它的受欢迎程度现在已经下降,转而支持 JSON 格式。
XML vs HTML
特性 | XML | HTML |
---|---|---|
主要用途 | 用于传输与存储数据 | 用于显示数据 |
格式要求 | 严格区分大小写 | 不区分大小写 |
空格处理 | 不会自动删除空格 | 自动删除空格 |
标签定义 | 标签可根据数据需求自定义扩展 | 标签是预定义的 |
XML文档的构建模块
元素元素 (Element):
XML 文档的基本组成单位。一个元素由开始标签、结束标签及其内容组成。元素可以包含属性、文本、其他元素或这些的组合。元素的名称通常遵循大小写敏感的规则。
示例:
<book>内容</book>
属性 (Attribute):
属性用于为元素提供额外的描述信息。属性总是包含在开始标签中,具有键值对的形式。
示例:
<book title="学习XML">内容</book>
在这个例子中,title 是 book 元素的属性,值为 “学习XML”。
实体 (Entity):
实体是一个特殊的标识符,用于表示在文档中反复使用的数据片段。它们通常用于替代某些字符(如 <、>)或存储外部文件。
预定义实体:
< <!-- 小于符号 < -->
> <!-- 大于符号 > -->
& <!-- 与符号 & -->
示例:
<book><title>XML & HTML</title><description>这是一个包含特殊字符的文本,例如 < 和 >。</description>
</book>
在这个例子中,&
表示 &,<
表示 <,>
表示 >。这些实体保证了 XML 文件在解析时不会产生冲突。
实体可以是字符实体(如上述示例)或外部实体(如外部文件引用)。
PCDATA(parsed chatacter data):
XML 解析器通常会解析 XML 文档中所有的文本。
当某个 XML 元素被解析时,其标签之间的文本也会被解析:
<message>This text is also parsed</message>
解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个实例中,其中的 元素包含着另外的两个元素(first 和 last):
<name><first>Bill</first><last>Gates</last></name>
而解析器会把它分解为像这样的子元素:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
解析字符数据(PCDATA)是 XML 解析器解析的文本数据使用的一个术语。
CDATA(Character Data):
术语 CDATA 是不应该由 XML 解析器解析的文本数据。
像 “<” 和 “&” 字符在 XML 元素中都是非法的。
- “<” 会产生错误,因为解析器会把该字符解释为新元素的开始。
- “&” 会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 <![CDATA[
开始,由 ]]>
结束:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>
在上面的实例中,解析器会忽略 CDATA 部分中的所有内容。
关于 CDATA 部分的注释:
CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 “]]>” 不能包含空格或换行。
XML特性
- 所有 XML 元素都须有关闭标签
- XML 标签对大小写敏感
- XML 必须正确地嵌套
- XML 文档必须有根元素
- XML 的属性值需要加引号
XML实体
XML 实体是对数据的引用,根据实体种类的不同,XML 解析器将使用实体的替代文本或者外部文档的内容来替代实体引用。
XML 实体由三部分构成: 一个与字符 &
, 一个实体名称, 以及一个分号 ;
。
XML 语言的规范中内置了各种实体。例如实体<
和>
代表字符 < 和 >。这些是
用于表示 XML 标签的元字符,因此当它们出现在数据中时,通常必须使用它们的实体来表示。
实体类别:
- 参数实体:用%声明,用%引用;在 DTD 中声明,在DTD中引用。
<!DOCTYPE book [%author; <!-- 引用参数实体 --><!ENTITY % author "John Doe">
]>
<book><title>XML教程</title><author>%author;</author> <!-- 使用参数实体 -->
</book>
- 其余实体:直接用实体名称声明,使用&引用;在 DTD 中声明,在 XML 中引用。
<!DOCTYPE book [<!ENTITY author "John Doe">
]>
<book><title>XML教程</title><author>&author;</author> <!-- 使用一般实体 -->
</book>
文档类型(DTD)
文档类型定义(DTD,Document Type Definition)可定义合法的 XML文档构建模块,它使用一系列合法的元素来定义文档的结构(文档中使用的标签、属性及其组合方式)。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用,也可以是两者的混合。
示例:
<?xml version="1.0"?>
<!DOCTYPE user [<!-- 定义根元素为 user --><!ELEMENT user (username, password, userid, mail)> <!-- 定义 user 有四个子元素 --><!ELEMENT username (#PCDATA)> <!-- 定义子元素类型为 #PCDATA --><!ELEMENT password (#PCDATA)><!ELEMENT userid (#PCDATA)><!ELEMENT mail (#PCDATA)>
]>
<user><username>pinginglab</username><password>Pinker@123</password><userid>1</userid><mail>pinginglab@mail.com</mail>
</user>
DTD引用方式:
<!ELEMENT user (username, password, userid, mail)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT userid (#PCDATA)>
<!ELEMENT mail (#PCDATA)>
#user.dtd文件
<?xml version="1.0"?>
<!DOCTYPE user SYSTEM "user.dtd">
<user><username>xiaoming</username><password>xiaoming@123</password><userid>1</userid><mail>xiaoming@mail.com</mail>
</user>
XML自定义实体
XML 允许在 DTD 中定义自定义实体。例如:
<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>
此定义意味着 XML 文档中对&myentity;实体引用的任何用法都将替换
为定义的值:“my entity value”。
XML外部实体
XML 外部实体是一种自定义实体,其定义位于声明它们的 DTD 之外。
外部实体的声明使用 SYSTEM 关键字,并且必须指定应从中加载实体值的URL。例如:
<!DOCTYPE foo [ <!ENTITY test SYSTEM "http://www.baidu.net" > ]>
URL 可以使用file://协议,因此可以从文件加载外部实体。例如:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE foo [ <!ENTITY hosts SYSTEM "file:///etc/hosts" > ]>
<abc>&hosts;</abc>
默认支持协议
libxml2 | PHP | Java | .NET |
---|---|---|---|
file | file | http | http |
http | http | https | https |
ftp | ftp | ftp | ftp |
php | file | file | |
compress.zlib | jar | ||
compress.bzi | netdoc | ||
p2 | mailto | ||
data | gopher | ||
glob | |||
phar |
相关文章:
XML(eXtensible Markup Language)
eXtensible Markup Language(可扩展标记语言)是一种用来存储和传输数据的文本格式。 具体定义 XML 可扩展标记语言,是用于标记电子文件使其具有结构性的标记语言,可以 用来标记数据、定义数据类型,是一种允许用户对自…...
SpringBoot两种方式接入DeepSeek
方式一:基于HttpClient 步骤 1:准备工作 获取 DeepSeek API 密钥:访问 DeepSeek 的开发者平台,注册并获取 API 密钥。 步骤 2:引入依赖 <dependency><groupId>org.springframework.boot</groupId&g…...
el-date-picker 组件限制禁止选择当前时间之前的时间
页面代码 <el-date-pickerv-model"xxx.startTime"type"datetime"placeholder"请选择开始时间"value-format"YYYY-MM-DD HH:mm:ss"clearable:disabledDate"disabledDateFn":disabled-hours"disabledHours":dis…...
嵌入式科普(33)深度解析C语言中的const和volatile关键字
1. 关键字基础概念 const:定义"只读变量",被修饰的变量不可被程序修改 volatile:提醒编译器该变量可能被意外修改,禁止编译器优化 九、e2studio VS STM32CubeIDE之const修饰BSP函数的形参 嵌入式科普(23)指向寄存器的…...
DIP的实际举例
SOLID原则。 依赖倒置原则(DIP)的核心是高层模块不应该依赖于低层模块,二者都应该依赖于抽象(接口或抽象类) 例如,随着业务的发展,订单总金额的计算规则可能需要根据不同的客户类型或促销活动…...
【GESP】C++二级真题 luogu-b3955, [GESP202403 二级] 小杨的日字矩阵
GESP二级真题,多层循环、分支语句练习,难度★✮☆☆☆。 题目题解详见:https://www.coderli.com/gesp-2-luogu-b3955/ 【GESP】C二级真题 luogu-b3955, [GESP202403 二级] 小杨的日字矩阵 | OneCoderGESP二级真题,多层循环、分支…...
python类型转换深浅拷贝
1.类型转换 1.1 int(x):转化为一个整数,只能转换由纯数字组成的字符串 float->int 浮点型强转整形会去掉小数点后面的数,只保留整数部分 a 1.2 print(type(a)) #<class float> b int(a) print(type(b)) #<class int>print(int…...
Kafka面试题汇总
基础篇 1、什么是 Apache Kafka?它的主要用途是什么? 2、Kafka 中的几个核心概念是什么?请简要说明每个概念的作用。 3、Kafka 的 Producer 和 Consumer 是如何工作的?它们之间的数据传递机制是什么? 进阶篇 1、K…...
window安装MySQL5.7
1、下载MySQL5.7.24 浏览器打开: https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-winx64.zip 2、解压缩 下载下来的是一个压缩包,解压到你想放到的目录下面,我放的是“C:\MySQL” 3、配置MySQL环境变量 计算机右键 - 属性 …...
什么是手机9008模式?如何进入9008
之前给大家分享了一些有关手机刷机的知识,今天给大家讲一讲如果刷机过程中不慎变砖应该如何应对(当然了,希望大家都不会遇到)😂😄 在给手机 Root 或刷机时,线刷 9008 指的是利用 高通 9008 模式…...
【jira】用到几张表
jira用到的几张表 测试计划,测试周期,测试用例,问题记录 1. 测试计划 # 记录表,查计划详情 SELECT ID,issuenum,SUMMARY FROM jiraissue where issuenum 22871# 测试计划下,测试周期,查测试周期id&…...
文件包含-session2
[题目信息]: 题目名称题目难度文件包含-session22 [题目考点]: 由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意…...
在 MySQL 的 InnoDB 存储引擎中,脏页(Dirty Page)的刷盘(Flush)时机
1. 后台线程周期性刷盘 触发机制: InnoDB 的 Page Cleaner 线程 会周期性地将脏页刷入磁盘,防止内存中脏页堆积。 触发条件: 脏页比例阈值:当 Buffer Pool 中脏页占比超过 innodb_max_dirty_pages_pct(默认 90%&#…...
Vscode编辑器获取更新远程最新分支
解决:打开当前项目的终端,输入 git remote update origin --prune # 查看远程分支 git branch -r --prune --prune 参数告诉 Git 清理那些远程仓库中已经删除但本地仍然存在的跟踪分支。 命令作用 更新远程仓库引用: git remote update …...
`AdminAdminDTO` 和 `userSession` 对象中的字段对应起来的表格
以下是将更正后的表格放在最前面的回答,表格包含序号列,合并了后端 AdminAdminDTO 和前端 userSession 的所有字段,并标注对方没有的字段。token 字段值用省略号(...)表示: 序号字段名AdminAdminDTO (后端…...
存储引擎、索引(MySQL笔记第四期)
p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解 目录 存储引擎概念InnoDB存储引擎MyISAM存储引擎Memory存储引擎存储引擎的选择 索引三种索引索引分类语法(创建/查看/删除)性能分析工具SQL执行频率慢查询日志profile详情explain执行计…...
全面汇总windows进程通信(二)
在Windows操作系统下,实现进程间通信(IPC, Inter-Process Communication)有几种常见的方法,包括使用管道(Pipe)、共享内存(Shared Memory)、消息队列(Message Queue)、命名管道(Named Pipe)、套接字(Socket)等。本文介绍如下几种: 信号量(Semaphore)和互斥量(…...
【大模型】蓝耘智算云平台快速部署DeepSeek R1/R3大模型详解
目录 一、前言 二、蓝耘智算平台介绍 2.1 蓝耘智算平台是什么 2.2 平台优势 2.3 应用场景 2.4 对DeepSeek 的支持 2.4.1 DeepSeek 简介 2.4.2 DeepSeek 优势 三、蓝耘智算平台部署DeepSeek-R1操作过程 3.1 注册账号 3.1.1 余额检查 3.2 部署DeepSeek-R1 3.2.1 获取…...
心理咨询小程序的未来发展
还在眼巴巴看着心理咨询行业的巨大蛋糕却无从下口?今天就来聊聊心理咨询小程序的无限潜力 据统计,全球超 10 亿人受精神心理问题困扰,国内心理健康问题也日益突出,心理咨询需求猛增。可传统心理咨询预约难,费用高&…...
硬件工程师入门教程
1.欧姆定律 测电压并联使用万用表测电流串联使用万用表,红入黑出 2.电阻的阻值识别 直插电阻 贴片电阻 3.电阻的功率 4.电阻的限流作用 限流电阻阻值的计算 单位换算关系 5.电阻的分流功能 6.电阻的分压功能 7.电容 电容简单来说是两块不连通的导体加上中间的绝…...
大模型本地部署硬件资源学习(包含模型微调所需资源)
大模型本地部署硬件配置学习 前言1.大模型应用需求分析扩展框架2.华为昇腾算力3.显卡信息汇总对比表4.大模型微调显卡资源指南(Qwen系列与DeepSeek蒸馏模型)一、Qwen系列模型微调显存需求二、DeepSeek-R1蒸馏模型微调显存需求三、显存优化策略与硬件选型…...
【DeepSeek系列】05 DeepSeek核心算法改进点总结
文章目录 一、DeepSeek概要二、4个重要改进点2.1 多头潜在注意力2.2 混合专家模型MoE2.3 多Token预测3.4 GRPO强化学习策略 三、2个重要思考3.1 大规模强化学习3.2 蒸馏方法:小模型也可以很强大 一、DeepSeek概要 2024年~2025年初,DeepSeek …...
Java基础常见的面试题(易错!!)
面试题一:为什么 Java 不支持多继承 Java 不支持多继承主要是为避免 “菱形继承问题”(又称 “钻石问题”),即一个子类从多个父类继承到同名方法或属性时,编译器无法确定该调用哪个父类的成员。同时,多继承…...
山东大学软件学院nosql实验四
实验题目: 使用Java做简单数据插入 实验内容 用API方式,做数据插入。 使用Java语言实现数据插入界面,为实验一建立的学生、教师、课程表插入数据,可以在前端界面中录入数据之后保存,也可以导入Excel中的数据。 实…...
Linux | man 手册使用详解
注:本文为 “Linux man 手册” 相关文章合辑。 略作重排。 man 手册常用命令 1. 查看和搜索手册页 查看特定软件包的手册页,并使用 grep 命令过滤出包含特定关键字的行: man <package> | grep <keyword>在整个系统的手册页中…...
初阶数据结构(C语言实现)——1数据结构前言
1. 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。 2.什么是算法? 算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一…...
Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式
Windows(奇思妙想) - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式 前言 Windows启用OpenSSH客户端后就可以通过SSH的方式访问Windows了。但是通过SSH启动的程序: 无法显示图形界面会随着SSH进程的结束而结束 于是想到了一种通过执行“计划…...
基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现
大家好,今天要和大家聊的是一款基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现。项目源码以及部署相关事宜请联系我,文末附上联系方式。 项目简介 基于 SpringBoot 的 “电影交流平台小程序” 系统设计与实现的主要使用者分为 管理员 和…...
工具方法 - 合规性矩阵
Compliance matrix (合规性矩阵)是产品需求管理中的一个重要工具,它是用来识别、跟踪、监控和组织所有客户和利益相关方需求是否被满足的工具。具体来说,Compliance matrix需要用一行一行的证据来证明被设计的产品针对每个需求的实…...
2.2 STM32F103C8T6最小系统板的四种有关固件的开发方式
2.2.1 四种有关固件的开发方式 四种有关于固件的开发方式从时间线由远及近分别是:寄存器开发、标准外设驱动库开发、硬件抽象层库开发、底层库开发。 四种开发方式各有优缺点,可以参考ST官方的测试与说明。 1.寄存器开发 寄存器编程对于从51等等芯片过渡…...
go 环境准备
配置路径: GOROOT:D:\GoGOPATH:go的工作目录 D:\workspacego 验证版本:go version 配置第三方仓库: GO111MODULE:开启mod模式GOPROXY:go语言三方库地址GOSUMDB:go语言软件包的M…...
VMware安装Centos 9虚拟机+设置共享文件夹+远程登录
一、安装背景 工作需要安装一台CentOS-Stream-9的机器环境,所以一开始的安装准备工作有: vmware版本:VMware Workstation 16 镜像版本:CentOS-Stream-9-latest-x86_64-dvd1.iso (kernel-5.14.0) …...
高中数学基础-平面向量
文章目录 1、平面向量2、复数 高中数学-平面向量、复数 1、平面向量 向量:具有大小和方向的量称为向量;物理学中向量也称矢量,只有大小没有方向的量称为标量;向量的大小称为模,大小为1的是单位向量,长度为0…...
v4l2子系统学习(三)编写虚拟摄像头驱动
文章目录 1、声明2、前言3、虚拟摄像头驱动编写3.1、编写硬件相关代码3.2、程序示例 1、声明 本文是在学习韦东山《驱动大全》V4L2子系统时,为梳理知识点和自己回看而记录,全部内容高度复制粘贴。 韦老师的《驱动大全》:商品详情 其对应的…...
堆排序(详解)c++
堆排序 (可以⽤ ppt 演⽰流程) 堆排序(Heap Sort)是指利⽤堆这种数据结构所设计的⼀种排序算法。本质上是优化了选择排序算法,选择排序的思想是在堆排序元素中拿出最大值或最小值,然后把这个位置的值放在它该放的位置上就可以了&a…...
API测试工具:Swagger vs Postman 2025最新全面对比
随着微服务架构的普及和云原生应用的激增,高效的 API 开发、测试和文档管理工具变得越来越重要。在众多 API 工具中,Swagger 和 Postman 各自以不同的方式解决着 API 开发生命周期中的关键问题,本文将从多个维度深入对比这两款工具࿰…...
算法-图-数据结构(邻接矩阵)-BFS广度优先遍历
邻接矩阵广度优先遍历(BFS)是一种用于遍历或搜索图的算法,以下是具体介绍: 1. 基本概念 图是一种非线性的数据结构,由顶点和边组成,可分为无向图、有向图、加权图、无权图等。邻接矩阵是表示图的一种数…...
List的模拟实现(2)
前言 上一节我们讲解了list的基本功能,那么本节我们就结合底层代码来分析list是怎么实现的,那么废话不多说,我们正式进入今天的学习:) List的底层结构 我们先来看一下list的底层基本结构: 这里比较奇怪的…...
【C++设计模式】观察者模式(1/2):从基础到优化实现
1. 引言 在 C 软件与设计系列课程中,观察者模式是一个重要的设计模式。本系列课程旨在深入探讨该模式的实现与优化。在之前的课程里,我们已对观察者模式有了初步认识,本次将在前两次课程的基础上,进一步深入研究,着重…...
可狱可囚的爬虫系列课程 13:Requests使用代理IP
一、什么是代理 IP 代理 IP(Proxy IP)是一个充当“中间人”的服务器IP地址,用于代替用户设备(如电脑、手机等)直接与目标网站或服务通信。用户通过代理IP访问互联网时,目标网站看到的是代理服务器的IP地址&…...
冒险岛079 V8 整合版源码搭建教程+IDEA启动
今天教大家来部署下一款超级怀旧游戏冒险岛,冒险岛源码是开源的,但是开源的代码会有各种,本人进行了加工整合,并且用idea进行了启动测试,经过修改后没有任何问题。 启动截图 后端控制台 前端游戏界面 声明 冒险岛源码…...
Web刷题之PolarDN(中等)
1.到底给不给flag呢 代码审计 一道典型的php变量覆盖漏洞 相关知识 什么是变量覆盖漏洞 自定义的参数值替换原有变量值的情况称为变量覆盖漏洞 经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当&…...
[250224] Yaak 2.0:Git集成、WebSocket支持、OAuth认证等 | Zstandard v1.5.7 发布
目录 Yaak 2.0 发布:Git 集成、WebSocket 支持、OAuth 认证等众多功能!Zstandard v1.5.7 发布:性能提升,稳定性增强 Yaak 2.0 发布:Git 集成、WebSocket 支持、OAuth 认证等众多功能! Yaak,一款…...
插入排序:一种简单而直观的排序算法
大家好!今天我们来聊聊一个简单却非常经典的排序算法——插入排序(Insertion Sort)。在所有的排序算法中,插入排序是最直观的一个。 一、插入排序的基本思想 插入排序的核心思想是:将一个待排序的元素,插…...
vue2响应式数据原理
1. 核心原理 Vue 2 的响应式系统基于 Object.defineProperty,通过 依赖收集 和 派发更新 来实现数据的响应式 依赖收集:在读取数据时,记录哪些函数(或组件)依赖了该数据。派发更新:在修改数据时ÿ…...
对免认证服务提供apikey验证
一些服务不带认证,凡是可以访问到服务端口,都可以正常使用该服务,方便是方便,但是不够安全。 比如ollama默认安装后就是这样。现在据说网上扫一下端口11434,免apikey的ollama服务一大堆。。。 那我们怎样将本机安装的o…...
算法——Trie 树
Trie 树(前缀树或字典树)是一种高效处理字符串集合的树形数据结构,核心思想是通过共享公共前缀来优化存储和查询。以下是 Trie 树的详细介绍: 1. Trie 树的基本概念 结构特点: 每个节点表示一个字符。从根节点到某一节…...
python中的JSON数据格式
文章目录 什么是json主要功能Python数据和Json数据的相互转化 什么是json JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据。JSON本质上是一个带有特定格式的字符串。 主要功能 json就是一种在各个编程语言中流通的数据格式,负责不同编…...
服务器能否拒绝非浏览器发起的HTTP请求?
互联网各领域资料分享专区(不定期更新): Sheet 前言 服务器可以采取多种方法来拒绝非浏览器发起的HTTP请求,但需要明确的是:HTTP协议本身并不限制客户端类型,任何符合协议规范的请求都会被处理。因此,拒绝非浏览器请求需依赖额外策略。 正文 一、基于请求头过滤 1、Us…...
深度学习之图像分类(二)
前言 文章主要是通过实战项目——食品分类来理解分类项目的整体流程。除此之外,还需要对半监督学习,迁移学习,数据增广,Adam和AdamW进行了解。 数据增广 图片增广(Image Data Augmentation)是深度学习中一种…...