XML 语法
- XML 声明文件,放在文件第一行
<?xml version="1.0" encoding="UTF-8" ?>
- XML 必须包含根元素,比如下面的 userInfo 元素
<userInfo>
<name>d4m1ts</name>
<age>18</age>
</userInfo>
- 所有的 XML元素必须闭合
<p>paragraph</p> <!-- 后面的 </p> 不能省略 -->
- XML 标签对大小写敏感
- 所有的元素必须正确的嵌套
<b><p>This text is bold and italic</b></p> <!-- 错误 -->
<p><i>This text is bold and italic</i></p> <!-- 正确 -->
- 属性都必须加双引号
<p attr="加双引号">aa</p>
- XML 注释和 HTML 一样
<!-- 我是注释 -->
XML DTD
DTD 简介
XML DTD 的作用是定义 XML 文档的合法构建模块,使用一系列的合法元素定义文档结构
- 内部 DOCTYPE 声明
<!-- 语法 -->
<!DOCTYPE root-element [element-declarations]>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE userInfo [
<!ELEMENT userInfo (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age ANY>
]>
<userInfo>
<name>d4m1ts</name>
<age>18</age>
</userInfo>
- DTD 内容解释:
* `!DOCTYPE userInfo`: 表明此 DTD 文件是用于定义 userinfo 元素的结构
* `!ELEMENT userInfo (name,age)` : 表明 userIndo 有两个元素 name、age
* `!ELEMENT name (#PCDATA)` : 定义 name 元素的数据类型
* `!ELEMENT age ANY` : ANY 表示任何可解析的数据组合
- 外部 DOCTYPE 声明
<!-- 语法 -->
<!DOCTYPE root-element SYSTEM "filename">
<!-- XML文件 -->
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<!-- 包含 DTD 的 "note.dtd" 文件 -->
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
DTD 实体
DTD 实体是用于定义引用普通文本或特殊字符的快捷方式的
**变量**
。
- 内部实体
<!-- 语法 -->
<!ENTITY entity-name "entity-value">
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE userInfo [
<!ELEMENT userInfo (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ENTITY name "d4m1ts">
]>
<userInfo>
<name>&name;</name>
<age>18</age>
</userInfo>
- 外部实体
<!-- 语法 -->
<!ENTITY entity-name SYSTEM "URI/URL">
<!-- 不要求后缀一定是 dtd,只要符合 dtd 文件格式即可 -->
<!ENTITY name SYSTEM "http://baidu.com/test.dtd">
- 通用实体
<?xml version="1.0"?>
<!DOCTYPE a [<!ENTITY b SYSTEM "file:///etc/passwd" >]>
<x>&b;</x>
- 参数实体
<!-- http://xxx.com/xxe.dtd -->
<!ENTITY xxe SYSTEM "file:///etc/passwd" >
<?xml version="1.0"?>
<!DOCTYPE a [<!ENTITY % d SYSTEM "http://xxx.com/xxe.dtd" >
%d;
]>
<x>&xxe;</x>
- % 用于实体在 DTD 定义内部求值的情况
- & 用于实体在 XML 文档中被求值的情况
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 |