我的PHP之旅--XML初步
什么是XML?
XML是可拓展标记语言,它和XHTML很像、但它和XHTML的目的性不一样,XHTML负责展示数据,而XML负责保存或交换传输数据。
而且XML可拓展,它没有固定的标签、它的标签可以自定义。
功能
- 数据存储。(可作为小型数据库,配置文件)
- 数据传输、交换。(ajax,web服务:天气查询,电话号码归属地查询等)
结构
XML是树形结构,必须拥有一个根节点:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book number="0593">
<name>1984</name>
<category>文学</category>
</book>
<book number="1578">
<name>史记</name>
<category>历史</category>
</book>
<book number="5493">
<name>西西弗神话</name>
<category>哲学</category>
</book>
</books>
注:根节点必须且只有一个,XML的节点有三种:元素,属性,文本。
实体引用
当我们编写含有特殊符号的文本时需要用到实体转移:
- <: <
- >: >
- &: &
- &apos: '
- quot: "
当文本含有过多的特殊符号时 可以使用CDATA处理:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<some_string>
<![CDATA[
slie'se'f'd"sa"<>fe &&&&&
]]>
</some_string>
</root>
DTD
DTD是用来规范XML的,XML是可拓展的标记语言,元素可以随意编写 所以我们需要一种机制来约束或者说规范XML文档,特别是在传输数据时。
验证网站:http://validator.w3.org
元素定义
<!ELEMENT 元素名 元素内容模型>
我们需要处理5种元素:
- 仅仅包含元素的元素
- 仅仅包含文本的元素
- 包含文本和元素的混合元素
- 空元素
- 任意元素
我们以后会经常使用的符号:
- EMPTY 代表元素为空 <!ELEMENT 元素名 EMPTY>
- ANY 代表任何内容 <!ELEMENT 元素名 ANY>
- (#PCDATA) 代表之包含文本 <!ELEMENT 元素名 (#PCDATA)>
- () 代表要包含的子元素 <!ELEMENT 元素名 (子元素)>
- , 代表子元素的顺序 <!ELEMENT 元素名 (子元素1,子元素2,…………)> 如果使用顺序符号,那么编写XML时子元素的顺序必须按照DTD的顺序编写
- | 代表或 <!ELEMENT 元素名 (子元素1|子元素2)> 或的意思是 两个子元素必须二选一 且必须出现
- + 代表至少出现一次 <!ELEMENT 元素名 (子元素1+)> 子元素1至少出现一次
- * 代表可0或任意次数 <!ELEMENT 元素名 (子元素1*)> 子元素1可不出现,也可出现多次
- ? 代表出现0或1次 <!ELEMENT 元素名 (子元素1?)> 子元素1可不出现,或只能出现一次
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book+)>
<!ELEMENT book (name,category)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT category (#PCDATA)>
]>
<books>
<book>
<name>1984</name>
<category>文学</category>
</book>
<book>
<name>史记</name>
<category>历史</category>
</book>
<book>
<name>西西弗神话</name>
<category>哲学</category>
</book>
</books>
包含混合元素:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book+)>
<!ELEMENT book (name,category)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT category (#PCDATA|some_element)*>
<!ELEMENT some_element (#PCDATA)>
]>
<books>
<book>
<name>1984</name>
<category>文<some_element>sliejfj</some_element>学</category>
</book>
<book>
<name>史记</name>
<category>历史</category>
</book>
<book>
<name>西西弗神话</name>
<category>哲学</category>
</book>
</books>
属性定义
格式:<!ATTLIST 元素名 属性名 属性值类型 取值方式>
属性值类型:
- CDATA:字符类型。
- (en1,en2....):枚举中的一个。
- ID:值是唯一的ID,只允许出现一次。
- IDREF:值是另一个元素的ID。
- IDREFS:值为其他ID列表。
- NMTOKEN:值为合法的XML名称。
- NMTOKENS:值为合法的XML名称列表。
- ENTITY:值为一个实体。
- ENTITIES:实体列表。
- NOTATION:符号的名称。
- xml:值是预定义的xml值。
取值方式:
- REQUIRED:属性值是必须的。
- IMPLIED:属性值不是必须的。
- FIXED value:属性值是固定的,如果没有声明 则默认是这个值,如果声明了 那只能写这个值。
例子1:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book+)>
<!ELEMENT book (name)>
<!ELEMENT name (#PCDATA)>
<!ATTLIST book category CDATA #REQUIRED>
<!ATTLIST name order CDATA #IMPLIED>
]>
<books>
<book category='工具书'>
<name order='0'>PHP经典实例</name>
</book>
<book category='历史'>
<name>三国志</name>
</book>
</books>
例子2:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book)*>
<!ELEMENT book (name)>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name lang (en|zh) #IMPLIED>
]>
<books>
<book>
<name lang='en'>ThinkPHP</name>
</book>
</books>
例子3:默认值写法,如果没有声明用默认值,如果声明了 则覆盖默认值。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book)*>
<!ELEMENT book (name)>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name lang (en|zh) 'zh'>
]>
<books>
<book>
<name lang='en'>ThinkPHP</name>
</book>
</books>
例子4:一个元素含有多个属性
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book)*>
<!ELEMENT book (name)>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name lang (en|zh) #REQUIRED
id ID #REQUIRED>
]>
<books>
<book>
<name lang='en' id='q1'>ThinkPHP</name>
</book>
</books>
我的PHP之旅--XML初步的更多相关文章
- 我的PHP之旅--XML操作
XML操作 XML主要是做数据存储和WEB服务的,所以我们难免要操作它,这里只介绍PHP的simpleXML方式. 我们要操作的XML: <?xml version="1.0" ...
- LINQ TO XML初步了解
最近简单的学习了一下LINT TO XML,写篇博客在这,方便以后查看~~ 1.常用到的类 XmlDocument -- 文档(xml文件) XmlElement -- ...
- xml 初步学习 读取
引入xml文件 function loadXMLDoc(dname) { if (window.XMLHttpRequest) { xhttp = new ...
- xml初步,DTD和Schema约束
XML 可扩展的标记语言(!!!可扩展) 作用 1.存放数据 2.配置文件 语法 文档声明 <?xml version="1.0" encoding="UTF-8& ...
- LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步
LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码. 之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨 ...
- Java学习笔记(十三一)——Xml 常用知识总结
[前面的话] 在学习spring框架,发现很多地方都用到了Xml的知识,所以会过头来再学习学习Xml. 本章学习的是Xml的基础,所以基础性文章,选择性阅读. [Xml] 一.Xml初步了解 XML ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- 新一代编程:scala泛函编程技术-唠叨
准备了半年后,终于决定在这里开始我的scala编程技术学习体验撰写之旅.初步打算在这里把我学习.体验.掌握scala编程的过程与有兴趣的朋友分享.我想,虽然我这不是正式论文或者教课书之类的,但写个开场 ...
- Android自动化初探:ADB
Info:经过一段时间的准备,从今天开始自学Android之旅,初步学习会有疏漏,以后的每篇文章,我都会不断修改补全,直到完美. 2014-10-09:初版 --------------------- ...
随机推荐
- [算法练习] UVA 10420 - List of Conquests?
UVA Online Judge 题目10420 - List of Conquests 问题描述: 题目很简单,给出一个出席宴会的人员列表,包括国籍和姓名(姓名完全没用).统计每个国家有多少人参加, ...
- 【程序员的SQL金典】笔记(第1章~第5章)
第一章数据库入门 1.概念: 数据库 表 列 记录(行) 主键 索引 第二章 数据表的创建和管理 1.数据库系统中的数据类型大致可以分为五类:整数.数值.字符相关.日期时间以及二进 ...
- Agile.Net 组件式开发平台 - 数据访问组件
Agile.DataAccess.dll 文件为系统平台数据访问支持库,基于FluentData扩展重写,提供高效的性能与风格简洁的API,支持多种主流数据库访问. 当前市面上的 ORM 框架,如 E ...
- Web前端设计:Html强制不换行<nobr>标签用法代码示例
在网页排版布局中比如文章列表标题排版,无论多少文字均不希望换行显示,需要强制在一行显示完内容.这就可以nobr标签来实现.它起到的作用与word-break:keep-all 是一样的.nobr 是 ...
- iOS开发——model类模板(过滤null和ID)
说明:model类模板已默认过滤null值,附加特殊情况的关键字ID名的冲突(需手动去掉注释代码).MyMessageModel为示例的名字.可以自己随便起. 1.自己创建一个继承与N ...
- Quartz 第三课 More About Jobs & JobDetails(官方文档翻译)
当学完第二课之后,你欣喜的发现,让jobs工作起来是还是相当简单的.虽然让jobs运行起来很简单,对于其执行的关键内容还是需要知道的.它们是IJob接口中的Execute和JobDetails. 当你 ...
- 用JS实现回文数的精准辨别!!!
笔者最近在一边看<JS高级程序设计3>一边在FCC上找题目练习啊.那叫一个爽.这不,刚刚用生命在课堂,寝室,实验室,图书馆等各种场所将第五章"引用类型"搞定,FCC便知 ...
- A标签执行js 代码和跳转
5.执行JS代码: <a href="javascript:js代码">内容</a> ⑥.使用js来实现空链接 写法:<a href="ja ...
- ZigBee2006,2007,pro各个版本的区别
文章转载自http://home.eeworld.com.cn/my/space-uid-361439-blogid-224722.html
- poj 1286 Necklace of Beads
这是做的第一道群论题,自然要很水又很裸.注意用long long. 就是用到了两个定理 burnside :不等价方案数=每个置换的不动置换方案数的和 / 置换个数 polya: 一个置换的不动置换方 ...