XML详解
0X00-引言
XML学习笔记,配套视频
0X01-XML概述
01-引入
01-XML是什么样的
1
baidu translate
3.0
2
你好
2.1
3
我很好
3.3
02-XML数据格式主要用途有哪些?
-
XML数据格式的主要作用是数据传输
-
程序之间的数据传输通讯,数据的载体,各编程语言都可以识别
-
配置文件 config.xml,xml文件在各个语言中具有通用性,可以做配置文件
-
存储数据,可以当做小型数据库,直接以文件的形式存储数据
-
规范数据格式,使数据具有结构性
02-什么是XML
- XML指的是,可扩展标记性语言
- XML被发明的目的是传输数据和存储数据,而不是展示数据(HTML)
- XML的标签要具有含义
- XML是W3C推举的数据传输格式
03-XML与HTML有什么不一样
- HTML标签不能自定义,XML标签只能自定义
- HTML语法要求不严格,XML语法要求极其严格,必须成对存在
- XML用来传输和存储数据,HTML用来展示数据
0X02-XML的基本语法
01-语法规则
- XML必须要有根节点,根节点就是其他所有节点的父级节点
- XML头部声明,可有可无,最好写上
- 所有XML元素都必须是成对标签
- 标签名区分大小写
- 标签不能交叉
- 注释符:
- 特殊字符需要实体转义
转义符 | 转义内容 | 说明 |
---|---|---|
& 或 & |
& | 和 |
< 或 < |
< | 小于号 |
> 或 > |
< | 小于号 |
" |
" | 双引号 |
|
空格 | |
© |
? | 版权符 |
® |
? | 注册符 |
02-元素属性
-
属性规则:一个标签可以有多个属性,属性的值必须使用引号括起来
-
属性就是表示标签自身的一些额外的信息
-
XML中属性就是鸡肋,因为标签可以自定义
-
解析XML数据时,属性会带来额外的解析代码(多了一步,比较麻烦)
-
写法
和HTML一样太白
03-CDATA区域
CDATA区域不解析
注意:特殊字符较少时,使用实体替换,较多时使用CDATA,注意大写
04-XML文档类型声明(DTD)
XML学习网站
XML文档类型声明(俗称DTD)是一种精确描述XML语言的方式。DTD根据适当XML语言的语法规则检查XML文档结构的词汇和有效性。
可以在文档中指定XML DTD,也可以将其保存在单独的文档中,然后单独添加。
01-用法
DTD开始于
02-内部DTD
内部DTD指的是直接在XML文件中声明元素
XML头部声明中的属性standalone="yes"
语法
直接例子分析
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
]>
Tanmay Patil
TutorialsPoint
(011) 123-4567
头部声明
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
DTD文档类型声明,以
在DTD的正文中可以声明元素,属性,实体和符号
中address为根节点,圆括号内的内容为子节点。
<!ELEMENT name(#PCDATA)>将元素名称定义为“#PCDATA”类型。这里#PCDATA表示可分析的文本数据。
规则:
DTD声明必须放在文档的开头XML头部声明之后,且XML头部声明中standalone="yes"
DTD声明要符合DTD语法
在文档中使用DTD定义的根元素时,其根元素的子节点必须要在DTD声明中定义。
03-外部DTD
外部DTD元素在XML文件之外被声明。可以通过指定可能是合法的.dtd文件或有效URL 的系统属性来访问它们。要将其称为外部DTD,XML声明中的独立属性必须设置为no。这意味着声明包括来自外部来源的信息。
XML文档的头部声明设置为
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
外部DTD的语法为
其中file-name是.dtd扩展名的文件
实例:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
Tanmay Patil
TutorialsPoint
(011) 123-4567
第一行为XML头部声明,注意standalone="no"与内部DTD声明不同
第二行SYSTEM
为系统标识符,指向外部文件的位置
01-系统标识符
语法
引用外部文件
它包含关键字SYSTEM和指向文档位置的URI
02-公共标识符
公共标识符提供了一种定位DTD资源的机制
它以关键字PUBLIC开始,后跟一个专门的标识符。公共标识符用于标识目录中的条目。公共标识符可以遵循任何格式,但是常用的格式称为正式公共标识符或FPI。
04-声明实体格式
在DTD中进行实体声明时,将使用ENTITY关键字来声明。实体是用于定义引用普通文本或特殊字符的快捷方式的变量。实体可在内部或外部进行声明。
内部声明实体格式:
引用外部实体格式:
0X03-使用PHP解析XML
XML是一种数据传输格式,当PHP接收到的数据就是一段XML的时候,怎么用PHP出来XML数据呢?
在PHP5版本以后,其提供了一个非常强大的类库,SimpleXML类库,专门用于实现对XML文档的解析操作。
01-XML解析原理
PHP解析XML共分为3步:
- 读取XML文档到内存
- 形成DOM树
- 由DOM树生成对象并返回
02-SimpleXML类库
xml:
simplexml解析:
分析解析后的数据:
object(SimpleXMLElement)#1 (1) { ["man"]=> array(2) { [0]=> object(SimpleXMLElement)#2 (2) { ["name"]=> string(6) "尽兴" ["age"]=> string(2) "36" } [1]=> object(SimpleXMLElement)#3 (2) { ["name"]=> string(6) "太白" ["age"]=> string(2) "55" } } }
simplexml.php:从xml中提取“尽兴”,simplexml解析生成数组,尽兴
的数组下标为0
03-遍历XML数据
遍历标签name的内容
foreach循环:
echo $x->man[0]->name;foreach($x->man as $v){ echo $v->name;}
for循环:
$c = count($x->man);for ($i=0;$i<$c;$i++){ echo $x->man[$i]->name;}
04-添加节点
运用PHP里面的方法添加节点
<?php//simple_load_file解析XML文档,返回PHP对象$x = simplexml_load_file('test.xml');//对象中的addChild创建节点并给创建后的节点添加内容$man = $x -> addChild('man');$man->addChild('name','玉帝');$man->addChild('age','999');var_dump($x);//将添加后的对象重新解析成XML文档,写入文件$x->asXML('test.xml');
添加成功