XML 语法

  1. XML 声明文件,放在文件第一行
  1. <?xml version="1.0" encoding="UTF-8" ?>
  1. XML 必须包含根元素,比如下面的 userInfo 元素
  1. <userInfo>
  2. <name>d4m1ts</name>
  3. <age>18</age>
  4. </userInfo>
  1. 所有的 XML元素必须闭合
  1. <p>paragraph</p> <!-- 后面的 </p> 不能省略 -->
  1. XML 标签对大小写敏感
  2. 所有的元素必须正确的嵌套
  1. <b><p>This text is bold and italic</b></p> <!-- 错误 -->
  2. <p><i>This text is bold and italic</i></p> <!-- 正确 -->
  1. 属性都必须加双引号
  1. <p attr="加双引号">aa</p>
  1. XML 注释和 HTML 一样
  1. <!-- 我是注释 -->

XML DTD

DTD 简介

XML DTD 的作用是定义 XML 文档的合法构建模块,使用一系列的合法元素定义文档结构

  • 内部 DOCTYPE 声明
  1. <!-- 语法 -->
  2. <!DOCTYPE root-element [element-declarations]>
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE userInfo [
  3. <!ELEMENT userInfo (name,age)>
  4. <!ELEMENT name (#PCDATA)>
  5. <!ELEMENT age ANY>
  6. ]>
  7. <userInfo>
  8. <name>d4m1ts</name>
  9. <age>18</age>
  10. </userInfo>
  1. - DTD 内容解释:
  2. * `!DOCTYPE userInfo`: 表明此 DTD 文件是用于定义 userinfo 元素的结构
  3. * `!ELEMENT userInfo (name,age)` 表明 userIndo 有两个元素 nameage
  4. * `!ELEMENT name (#PCDATA)` 定义 name 元素的数据类型
  5. * `!ELEMENT age ANY` : ANY 表示任何可解析的数据组合
  • 外部 DOCTYPE 声明
  1. <!-- 语法 -->
  2. <!DOCTYPE root-element SYSTEM "filename">
  1. <!-- XML文件 -->
  2. <?xml version="1.0"?>
  3. <!DOCTYPE note SYSTEM "note.dtd">
  4. <note>
  5. <to>Tove</to>
  6. <from>Jani</from>
  7. <heading>Reminder</heading>
  8. <body>Don't forget me this weekend!</body>
  9. </note>
  1. <!-- 包含 DTD 的 "note.dtd" 文件 -->
  2. <!ELEMENT note (to,from,heading,body)>
  3. <!ELEMENT to (#PCDATA)>
  4. <!ELEMENT from (#PCDATA)>
  5. <!ELEMENT heading (#PCDATA)>
  6. <!ELEMENT body (#PCDATA)>

DTD 实体

DTD 实体是用于定义引用普通文本或特殊字符的快捷方式的**变量**

  • 内部实体
  1. <!-- 语法 -->
  2. <!ENTITY entity-name "entity-value">
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE userInfo [
  3. <!ELEMENT userInfo (name,age)>
  4. <!ELEMENT name (#PCDATA)>
  5. <!ELEMENT age (#PCDATA)>
  6. <!ENTITY name "d4m1ts">
  7. ]>
  8. <userInfo>
  9. <name>&name;</name>
  10. <age>18</age>
  11. </userInfo>
  • 外部实体
  1. <!-- 语法 -->
  2. <!ENTITY entity-name SYSTEM "URI/URL">
  1. <!-- 不要求后缀一定是 dtd,只要符合 dtd 文件格式即可 -->
  2. <!ENTITY name SYSTEM "http://baidu.com/test.dtd">
  • 通用实体
  1. <?xml version="1.0"?>
  2. <!DOCTYPE a [<!ENTITY b SYSTEM "file:///etc/passwd" >]>
  3. <x>&b;</x>
  • 参数实体
  1. <!-- http://xxx.com/xxe.dtd -->
  2. <!ENTITY xxe SYSTEM "file:///etc/passwd" >
  3. <?xml version="1.0"?>
  4. <!DOCTYPE a [<!ENTITY % d SYSTEM "http://xxx.com/xxe.dtd" >
  5. %d;
  6. ]>
  7. <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

参考

XML基础讲解