0x01 定义

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

0x02 文档结构说明

XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

基本文档结构例子

  1. <!--XML声明-->
  2. <?xml version="1.0"?>
  3. <!--文档类型定义-->
  4. <!DOCTYPE note [ <!--定义此文档是 note 类型的文档-->
  5. <!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素-->
  6. <!ELEMENT to (#PCDATA)> <!--定义to元素为”#PCDATA”类型-->
  7. <!ELEMENT from (#PCDATA)> <!--定义from元素为”#PCDATA”类型-->
  8. <!ELEMENT head (#PCDATA)> <!--定义head元素为”#PCDATA”类型-->
  9. <!ELEMENT body (#PCDATA)> <!--定义body元素为”#PCDATA”类型-->
  10. ]]]>
  11. <!--文档元素-->
  12. <note>
  13. <to>Dave</to>
  14. <from>Tom</from>
  15. <head>Reminder</head>
  16. <body>You are a good man</body>
  17. </note>

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

DTD(文档类型定义)

内部声明DTD

  1. <!DOCTYPE 根元素 [元素声明]>

引用外部DTD

  1. <!DOCTYPE 根元素 SYSTEM "文件名">
  2. <!DOCTYPE 根元素 PUBLIC "DTD名称" “DTD文件的URL”>

DTD中的一些重要的关键字

  • DOCTYPE(DTD的声明)
  • ENTITY(实体的声明)
  • SYSTEM、PUBLIC(外部资源申请)

0x03 XML预定义的实体引用

实体 代表的标签
< <
> >
"
'
& &

0x04 DTD的实体类别介绍

  • 内部实体
  • 外部实体

举例定义

内部实体定义例子

  1. <!ENTITY 实体名称 "实体的值">

外部实体定义例子

  1. <!ENTITY 实体名称 SYSTEM "URI">

0x05 XML中的协议支持

不同语言的协议支持

libxml2 PHP Java NET
file file http file
http http https http
ftp ftp ftp https
php file ftp
compress.zlib jar
compress.bzip2 netdoc
data mailto
glob gopher *
phar

PHP支持的扩展协议

扩展协议 需要扩展
https openssl
ftps
zip zip
ssh2.shell ssh2
ssh2.exec
ssh2.tunnel
ssh2.sftp
ssh2.scp
rar rar
ogg oggvorbis
expect expect