一,xml概述
1.1引入
在我们日常生活中我们在各种网站上面个看到他们都有天气什么的,他们展示的形式可能不同,但他们所用的数据是一样的,那他们肯定已不是从卫星直接获取的而是从国家的一些平台获取的
但是在获取他们的数据的时候他,因为有很多种语言都能写后端,们不可能是用你的那种语言写的格式,他要针对所有的平台进行发布,就用到了xml格式:
![图片[1],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229133632682.png?imageView2/0/format/webp/q/75)
XML数据格式最主要的功能就是数据传输(就是从一个网站传到另一个网站)
XML数据格式还有什么用途呢?
配置文件: config.xml (我们一个网站可能有几种语言编写,我们不可能给每种语言都配置相应的文件,我们就能用xml格式让他们都能用)
储存数据: 当作小型数据库 data.xml
xml的效果:使数据具有结构性,易读易处理
什么是XML
XML指的是可扩展性标记语言(html也是一个标记性语言);
XML被发明的目的是传输和存储数据,而不是展示数据;
XML的标签必须自定义,在写标签名的时候一定要有含义;
XML是W3C推举的数据传输格式;
如何自己写一段XML?
<root> #所有的XML必须有一个根节点<user>内容</user><msg>内容</msg></root><root> #所有的XML必须有一个根节点 <user>内容</user> <msg>内容</msg> </root><root> #所有的XML必须有一个根节点 <user>内容</user> <msg>内容</msg> </root>
XML和HTML有哪些区别?
1:HTML标签不能自定义,XML标签只能自定义;
2:HTML语法要求不严格,XML标签语法要求极其严格,必须是成对标签;
3:XML用来传输和存储数据,HTML用来展示数据;
二,XML的基本语法
语法规则
XML必须有根节点;
根节点就是所有节点的父级节点(习惯是用root,但也可以自己定义)
XML的头声明可有可无,但是建议写
因为编码很重要
所有XML标签都要成对出现
标签名大小写敏感
标签不能交叉
特殊符号要用实体转义
在xml中需要转义的字符有:
< < > >
& &
‘ ‘
” “‘
<?xml version="1.0" encoding="utf-8" ?> #头声明<root><define>text</define><!-- <a>这是注释</a> --><msg> 如果a < b ,就正确</msg> # 转义</root><?xml version="1.0" encoding="utf-8" ?> #头声明 <root> <define>text</define> <!-- <a>这是注释</a> --> <msg> 如果a < b ,就正确</msg> # 转义 </root><?xml version="1.0" encoding="utf-8" ?> #头声明 <root> <define>text</define> <!-- <a>这是注释</a> --> <msg> 如果a < b ,就正确</msg> # 转义 </root>
元素属性
属性原则:
一个标签可以有多个属性
属性的值必须用双引号或单引号引起来
命名规则:数字字母下划线,不能让数字开头
属性就是表示标签的 一些额外信息;
XML中属性就是个鸡肋(食之无肉,弃之有味)
在解析XML数据时,属性会带来额外的解析代码;
CDATA
<?xml version="1.0" encoding="utf-8" ?> #头声明<root><man><name><!--<![CDATA[ 不解析的内容 ]]>--><msg><![CDATA[尼古拉斯赵四说2>3]]</msg></name></man></root><?xml version="1.0" encoding="utf-8" ?> #头声明 <root> <man> <name> <!--<![CDATA[ 不解析的内容 ]]>--> <msg><![CDATA[尼古拉斯赵四说2>3]]</msg> </name> </man> </root><?xml version="1.0" encoding="utf-8" ?> #头声明 <root> <man> <name> <!--<![CDATA[ 不解析的内容 ]]>--> <msg><![CDATA[尼古拉斯赵四说2>3]]</msg> </name> </man> </root>
注意特殊字符较少时特殊字符有实体,较多时用CDATA(要大写)
三,使用PHP解析XML
XML时一种数据传输格式,当PHP接收到数据就是一段XML的时候,我们的PHP应该怎么处理XML数据呢?
在PHP5版本后,其提供了一个非常强大的类库,SimpleXML类库,专门有于实现对XML文档的解析操作.
XML解析原理
PHP解析三步:
1:读取XML文档到内存
2:形成DOM树
3:由DOM树生成对象并返回;
![图片[2],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229133758223.png?imageView2/0/format/webp/q/75)
<?php// simplexml_load_file 解析XML文档,返回PHP对象# file_get_contents("") 读普通文件$x = simplexml_load_file('3.1.xml');echo $x->man[0]->name?><?php // simplexml_load_file 解析XML文档,返回PHP对象 # file_get_contents("") 读普通文件 $x = simplexml_load_file('3.1.xml'); echo $x->man[0]->name ?><?php // simplexml_load_file 解析XML文档,返回PHP对象 # file_get_contents("") 读普通文件 $x = simplexml_load_file('3.1.xml'); echo $x->man[0]->name ?>
![图片[3],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229133822461.png?imageView2/0/format/webp/q/75)
![图片[4],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229133920562.png?imageView2/0/format/webp/q/75)
php解析生成的DOM树:
![图片[5],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229133843228.png?imageView2/0/format/webp/q/75)
遍历XML数据
<?php$x = simplexml_load_file('3.1.xml');foreach($x->man as $v){echo $v->name;}$c=count($x->man);for($i=0;$i<$c;$i++){echo $x->man[$i]->name;}?><?php $x = simplexml_load_file('3.1.xml'); foreach($x->man as $v){ echo $v->name; } $c=count($x->man); for($i=0;$i<$c;$i++){ echo $x->man[$i]->name; } ?><?php $x = simplexml_load_file('3.1.xml'); foreach($x->man as $v){ echo $v->name; } $c=count($x->man); for($i=0;$i<$c;$i++){ echo $x->man[$i]->name; } ?>
使用simpleXML增加节点
<?php$x = simplexml_load_file('3.1.xml');//对象中的addChild方法创建节点$man = $x->addChile('man')//对象中的addChild方法创建节点并给创建后的节点添加内容$man->addChile('name','玉帝');$man->addChile('age','999');//将添加的对象重新解析成XML文档,写入文件$x->asXML('3.1.xml');?><?php $x = simplexml_load_file('3.1.xml'); //对象中的addChild方法创建节点 $man = $x->addChile('man') //对象中的addChild方法创建节点并给创建后的节点添加内容 $man->addChile('name','玉帝'); $man->addChile('age','999'); //将添加的对象重新解析成XML文档,写入文件 $x->asXML('3.1.xml'); ?><?php $x = simplexml_load_file('3.1.xml'); //对象中的addChild方法创建节点 $man = $x->addChile('man') //对象中的addChild方法创建节点并给创建后的节点添加内容 $man->addChile('name','玉帝'); $man->addChile('age','999'); //将添加的对象重新解析成XML文档,写入文件 $x->asXML('3.1.xml'); ?>
案例
表单提交页面:
![图片[6],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229140724415.png?imageView2/0/format/webp/q/75)
后端:
![图片[7],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229140952256.png?imageView2/0/format/webp/q/75)
四,Xpath语言
概述
他是一门专门用于查找XML数据内容的语言;
他是用来在XML文档中对元素及属性进行遍历;
使用及其语法
绝对路径查找:
![图片[8],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229141929440.png?imageView2/0/format/webp/q/75)
相对路径查找:
![图片[9],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229142105164.png?imageView2/0/format/webp/q/75)
其他查找:
![图片[10],[XML]知识笔记,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/02/20240229142603493.png?imageView2/0/format/webp/q/75)
暂无评论内容