本文最后更新于456 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
一、XML简介
XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,其设计宗旨是传输数据,而非显示数据。
二、XML的组成部分
XML的文档结构包含以下几种
1、XML声明
//示例: <?xml version="1.0" encoding="UTF-8"?>
2、DTD文档类型定义(可选):DTD文档类型定义是一套为了进行程序见的数据交换而建立的关于标记符的语法
规则
3、文档元素
XML的构建模块组成与HTML类似,由下面几种组成:
元素:XML文档的主要构建模块,可包含文本内容
/ /示例:<username>quan9i</username>
属性:提供元素的额外信息
//示例:<img src="1.jpg"/> src就是属性
实体:实体是用来定义普通文本的变量。实体引用是对实体的引用。
PCDATA(parsed character data):被解析的字符数据
ps:PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
CDATA(character data):字符数据
ps:CDATA 是不会被解析器解析的文本。
三、XML语法规则
1.所有XML元素都须有关闭标签。
2.XML标签对大小写敏感。
3.XML必须正确地嵌套。
4.XML文档必须有根元素。
5.XML的属性值须加引号。
6.实体引用:在标签属性,以及对应的位置值可能会出现<、>符号,但是这些符号在对应的XML中
都是有特殊含义的,这时候我们必须使用对应的HTML实体来表示,比如:<符号对应的实体就是
<
7、在xML中,空格会被保留,比如:<p>aa空格bb</p> ,这个空格会被保留
<?xml version="1.0" encoding="UTF-8"?> <!--xml文件的声明-->
<tttang> <!--根元素-->
<article category="CTF"> <!--tttang的子元素,category为属性-->
<title>XXE</title> <!--article的子元素-->
<author>quan9i</author> <!--article的子元素-->
<year>2022</year> <!--article的子元素-->
<data>8.20</data> <!--article的子元素-->
</article> <!--article的结束-->
</tttang> <!--tttang的结束-->

四、DTD
文档类型定义(DTD),用于定义 XML 文档的结构、元素和属性。它使用一系列合法的元素来定义文档的结构,约束了 xml文档的结构。DTD可被成行地声明于 XML 文档中,也可作为一个外部引用。
1.内部引用
格式:
<!DOCTYPE 根元素[定义内容]>
示例:
<?xml version="1.0"?> <!--XML声明 -->
<!DOCTYPE note [ <!--定义了note元素-->
<!ELEMENT note (to,from,heading,body)> <!--定义note元素下的四个元素-->
<!ELEMENT to (#PCDATA)> <!--定义了note的子元素to,(#PCDATA)表示元素to是字符串形式-->
<!ELEMENT from (#PCDATA)> <!--定义了note的子元素from,(#PCDATA)表示元素from是字符串形式-->
<!ELEMENT heading (#PCDATA)> <!--定义了note的子元素heading,(#PCDATA)表示元素heading是字符串形式-->
<!ELEMENT body (#PCDATA)> <!--定义了note的子元素body,(#PCDATA)表示元素body是字符串形式-->
]>
<!-- 至此,上方是DTD文档定义-->
<note>
<to>quan9i</to>
<from>is</from>
<heading>a</heading>
<body>web xiao bai!</body>
</note>

2.外部引用
格式:
<!DOCTYPE 根元素 SYSTEM "DTD文件路径">
示例:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>quan9i</to>
<from>is</from>
<heading>a</heading>
<body>web xiao bai!</body>
</note>
note.dtd文件的内容如下:
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

五、DTD实体
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用
一般实体:
定义:<!ENTITY 实体名称 "实体内容">
调用:&实体名称;
参数实体:
定义:<!ENTITY % 实体名 "实体内容">
调用:%实体名称;
1.内部实体
格式:
<!ENTITY 实体名称 "实体的值">
示例:
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY article "XXE">
<!ENTITY author "quan9i">
]>
<test><article>&article;</article><author>&author;</author></test>

2.外部实体
格式:
<!ENTITY 实体名称 SYSTEM "URI/URL">
或者
<!ENTITY 实体名称 PUBLIC "public_ID" "URI">
示例:
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY author SYSTEM "1.xm1">
]>
<test>&author;</test>
外部实体同时还支持其他协议:
file、http、https、ftp
实际例子:
<?xml version = "1.0"encoding = "utf-8"?>
<!DOCTYPE test [
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<test>&file;</test>
参数实体:
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "file:///etc/passwd">
%file;
]>