学习xxe前先从菜鸟上简单学学xml:https://www.runoob.com/xml/xml-syntax.html
XML:
1.概念:
XML 指可扩展标记语言(eXtensible Markup Language)。
XML 被设计用来传输和存储数据。
XML 的设计宗旨是传输数据,而不是显示数据!
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
2.XML与HTML区别:
XML 被设计用来传输和存储数据,其焦点是数据的内容
HTML 被设计用来显示数据,其焦点是数据的外观。
即HTML 旨在显示信息,而 XML 旨在传输信息。
比如以下代码:
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
这个 XML 文档没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
并且from、to标签并不是xml预定义标签,纯粹是文档编辑者自己发明的,而且很便于理解,这一点不同于html中所有标签都是预定义过的!
总结: XML 是对 HTML 的补充,不会替代 HTML;XML 是独立于软件和硬件的信息传输工具;XML 用于传输数据,而 HTML 用于格式化并显示数据。
3.XML 树结构、DOM:
xml具有自我描述性的语法:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note>:根元素
子元素:to, from, heading ,body
父、子以及同胞等术语用于描述元素之间的关系(类似html的DOM)。树的节点就是一个个对象,通过DOM对其操作。(DOM 通过解析 XML 文档,为 XML 文档在逻辑上建立一个树模型,这样通过操作这棵树和这些对象就可以完成对 XML 文档的操作,为处理文档的所有方面提供了一个完美的概念性框架。)
<line id="1"> the <bold>First</bold>line</line>
由于DOM“一切都是节点(everything-is-a-node)”,XML树的每个 Document、Element、Text 、Attr和Comment都是 DOM Node。
由上面例子可知:
DOM实质上是一些节点的集合。由于文档中可能包含有不同类型的信息,所以定义了几种不同类型的节点,如:Document、Element、Text、Attr、CDATASection、ProcessingInstruction、Notation、EntityReference、Entity、DocumentType、DocumentFragment等。
4.XML语法:
(1)声明:XML 声明文件的可选部分,如果存在需要放在文档的第一行
<?xml version="1.0" encoding="utf-8"?>
(2)所有的 XML 元素都必须有一个关闭标签。
(3)XML 标签对大小写敏感。
(4)XML 必须正确嵌套:
在html中:
<b><i>This text is bold and italic</b></i>
这样是合法的。
但在xml中:
<b><i>This text is bold and italic</i></b>
必须正确嵌套,即b标签在最外层相互对应。
(5)在 XML 中,XML 的属性值必须加引号。
(6)实体引用:
在 XML 中,一些字符拥有特殊的意义。
如果您把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
这样会产生 XML 错误:
<message>if salary < 1000 then</message>
为了避免这个错误,请用实体引用来代替 “<” 字符:
<message>if salary < 1000 then</message>
(7)空格:
我们知道在html中多个空格会自动裁减(合并)为一个,但在xml中文档中的空格不会被删减。
5.XML元素:
(1)XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
一个元素可以包含:
其他元素
文本
属性
或混合以上所有…
(2)XML 元素命名规则:
名称可以包含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字母 xml(或者 XML、Xml 等等)开始
名称不能包含空格
使用"_"下划线字符是个好习惯
但避免出现“.”、“-”、“:”这样的字符
(3)XML可扩展性。
6.XML 属性:
1.针对元数据的 XML 属性:
有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 id 属性是一样的。这个实例向我们演示了这种情况:
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
上面的 id 属性仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。
2.可以根据 DTD 来验证 XML。
7.查看 XML 文件:
在所有主流的浏览器中,均能够查看原始的 XML 文件。
不要指望 XML 文件会直接显示为 HTML 页面!
为什么 XML 显示这个样子?
XML 文档不会携带有关如何显示数据的信息。
由于 XML 标签由 XML 文档的作者"发明",浏览器无法确定像 <table>
这样一个标签究竟描述一个 HTML 表格还是一个餐桌。
在没有任何有关如何显示数据的信息的情况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。
8.使用 XSLT 显示 XML:
使用 CSS 格式化 XML 不是常用的方法,我们通常用xslt。
XSLT 是首选的 XML 样式表语言。
通过使用 XSLT,您可以把 XML 文档转换成 HTML 格式。
xslt教程:https://www.runoob.com/xsl/xsl-tutorial.html
9.XML命名空间:
提供避免元素命名冲突的方法。
命名空间,可以在他们被使用的元素中或者在 XML 根元素中声明。
命名空间声明的语法如下。xmlns:前缀=“URI”。(不是url!URI:统一资源标识符;URL:统一资源定位器,URI包括URL!)
<root> <!-- 也可以在root内添加xmlns属性! -->
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="http://www.w3cschool.cc/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
命名空间,可以在他们被使用的元素中或者在 XML 根元素中声明。
10.XML CDATA:
XML 文档中的所有文本均会被解析器解析。(包括标签/元素)
PCDATA - 被解析的字符数据,是 XML 解析器解析的文本数据使用的一个术语。
只有 CDATA 区段中的文本会被解析器忽略。
术语 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 部分结尾的 “]]>” 不能包含空格或换行。
11.服务器上XML:
如需使用 PHP 从服务器上生成 XML 响应,请使用下面的代码:
<?php
header("Content-type: text/xml");
echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
echo "<note>";
echo "<from>Jani</from>";
echo "<to>Tove</to>";
echo "<message>Remember me this weekend</message>";
echo "</note>";
?>
请注意,响应头部的内容类型必须设置为 “text/xml”。
同样可以用asp(服务器上)/数据库生成xml,或在服务器上通过 XSLT 转换 XML(XML 文件转换为 XHTML:),或通过 ASP 把 XML 保存为文件(把文档保存到服务器)。
具体实现可参考:https://www.runoob.com/xml/xml-server.html
xml实例: https://www.runoob.com/xml/xml-examples.html
xml编辑器:https://www.runoob.com/xml/xml-editors.html
之后xml学习:
xml技术导航列表:https://www.runoob.com/xml/xml-technologies.html
https://www.runoob.com/xml/xml-summary.html
- 用 XML Schema 定义 XML 的结构和数据类型
- 用 XSLT 来转换 XML 数据
- 用 SOAP 来交换应用程序之间的 XML 数据
- 用 WSDL 来描述网络服务
- 用 RDF 来描述网络资源
- 用 XPath 和 XQuery 来访问 XML 数据
- 用 SMIL 来定义图形