XXE相关-XML学习笔记
XML介绍
可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
XML和HTML的辨析
差异
XML指可扩展标记语言(EXtensible Markup Language),被设计用于传输和存储数据,关注点是数据的内容;标签没有预定义,需要自定义;具有良好的自我描述性。
而HTML被设计用于显示数据,关注点是数据的外观。
自我描述性
XML 不会做任何事情,XML被设计用来结构化、存储以及传输信息。
它可以通过标签和内容很好的描述自己的功能和格式。
<email>
<from>A</from>
<to>B</to>
<title>Reminder</title>
<content>Don't forget me this weekend!</content>
</email>
它包含了发送者和接受者的信息,同时拥有标题以及消息,并且它仅仅是封装在XML中的信息,没有做出任何动作,仅通过编写程序进行解析,我们才能传送、接收和显示出这个文档。
XML重要但不是HTML的替代品
XML 是各种应用程序之间进行数据传输的最常用的工具。
XML 于 1998 年 2 月 10 日成为 W3C 的推荐标准。
**但XML 是对 HTML 的补充。**XML 不会替代 HTML,在大多数 Web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。
对 XML 最好的描述是:**XML 是独立于软件和硬件的信息传输工具。**因为,计算机系统和数据使用不兼容的格式来存储数据,XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。这让创建不同应用程序可以共享的数据变得更加容易。同时,XML数据为通用格式,可以减少成本,便于程序解析。
静态
描述属性和名词较为容易,但是描述动词相对困难。
缺点
冗余,SCHEMA验证复杂。事实证明,面向对象更加有优势。
XML组成部分
文档结构
XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素
一个标准的XML文档
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
DTD
**拥有正确语法的 XML 被称为“形式良好”的 XML。而通过 DTD 验证的 XML 是“合法”的 XML。**而DTD(文档类型定义)的作用就是是定义 XML 文档的合法构建模块。
格式
无论是外部还是内部
// 实体声明
<!ENTITY 实体名称 "实体值">
<!ENTITY 实体名称 SYSTEM "URI/URL">
// 例子
<!ENTITY author "Heph4es">
<信息>&author;</信息>
// 标签声明
<!ELEMENT 标签名 (子节点)> // 包含关系
<!ELEMENT 标签名 (#PCDATA)> // 描述独立关系
<!DOCTYPE 根节点 SYSTEM "dtd的地址"> // 引入DTD
引用方法
// 内部声明DTD
<!DOCTYPE 根元素 [元素声明]>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
// 外部声明DTD
// 本地文件
<!DOCTYPE 根元素 SYSTEM "URI">
// 网络的DTD
<!DOCTYPE 根元素 PUBLIC "DTD名称" "URL">
XML基础
语法
必须有声明
<?xml version="1.0" encoding="ISO-8859-1"?>
标签闭合
所有元素的标签必须闭合(声明不属于XML的内容部分)
大小写敏感
大小写差异的标签是不同的。
嵌套要正确
<人 性别="男">
<姓名>张三</姓名>
<人>
必须有根元素
必须有一个元素是所有其他元素的父元素。该元素称为根元素
属性值加引号
<人 性别="男">
<姓名>张三</姓名>
<人>
实体需要特别添加
详情请见我的另一篇文章 HTML实体
< <
注释
<!-- 注定是一条注释 -->
空格会被保留
XML中多个空格不会合并
元素
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
命名规则:不能以数字或者标点符号开始;不能以字符 “xml”(或者 XML、Xml)开始;不能包含空格(仅名称)。
避免使用:"-" ,"." ,":"
关于属性
尽量使用元素来描述,因为
属性不支持多重的值;无法描述树结构;不易扩展;不便于维护和阅读。
如,
<景点 位置="中国/上海/外滩">
<名称>xxxxx</名称>
<介绍>Don't forget the meeting!</介绍>
</景点>
位置逻辑上是景点的组成部分,可优化为(非必须)
<景点>
<名称>xxxxx</名称>
<位置>中国/上海/外滩</位置>
<介绍>Don't forget the meeting!</介绍>
</景点>
而作为区分不同经典的ID,本身不属于景点的详细信息,可以作为属性存储
<推荐景点>
<景点 ID="01">
<名称>xxxxx</名称>
<位置>中国/上海/外滩</位置>
<介绍>Don't forget the meeting!</介绍>
</景点>
<景点 ID="02">
<名称>xxxxx</名称>
<位置>中国/上海/外滩</位置>
<介绍>Don't forget the meeting!</介绍>
</景点>
<景点 ID="03">
<名称>xxxxx</名称>
<位置>中国/上海/外滩</位置>
<介绍>Don't forget the meeting!</介绍>
</景点>
</推荐景点>