PHP笔记----XML数据

XML数据
XML:可扩展性标记语言
XML被发明的目的是,传输和存储数据,而不是展示数据
XML标签必须自定义,标签名要有含义,且标签有开有合(必须成对)
所有的XML必须有一个根节点,意思就是要有一个标签包含所有内容就像HTML的“html”标签,这个标签一般为“root”
主要用途:

  • 程序之间数据传输通讯
  • 充当配置文件,如多个语言开发项目的时候
  • 存放数据,充当小型数据库

特点:

  • 规范的数据格式
  • 数据具有结构性
  • 易读易处理

XML的编写格式
XML头声明,不强制声明
XML区分大小写
XML不能使用特殊字符,如大于小于等
如果要使用,必须用实体
&lt : <
$gt :>
&amp : &
&apos : ’
&quot : "

XML注释<!-- -->
如下格式

<?xml version='1.0' encoding='utf-8' ?>
<root>
<name>test</name>
<!-- 注释内容 -->
</root>


XML属性:描述其本身额外的信息

<age name='tangxiaohan'></age>
属性规则:一个标签可有多个属性
属性必须使用引号
命名规则与变量名规则差不多
不过属性用到的地方不多

XML不将数据解析
在有些时候我们可能要使用很多的特殊字符,但是你又不想使用类似于&lt的转义字符,这里我们就可以用“CDATA”数据区域
“CDATA”不会将区域内的内容解析
格式如下:
<![CDATA[不解析的内容。。。]]>

<root>
	<user>托尔斯泰</user>
	<msg><![CDATA[托尔斯泰说如果1+1>2,那么2+2>4]]></msg>
</root>

在这里插入图片描述

XML数据解析
解析XML文件

既然XML是一种数据传输格式,那我们PHP怎么解析这种数据?
在php5版本后,为我们提供了一个非常强大的类库,SilpmeXML专门用于实现XML文档的解析操作
使用函数simplexml_load_file(path); 解析XML文件,返回php对象

//xml
<root>
	<user>托尔斯泰</user>
	<msg><![CDATA[12423]]></msg>
</root>
//php
$res = simplexml_load_file('./test.xml');
print_r($res);

在这里插入图片描述
但这里我的测试结果好像不能解析CDATA的数据,如果是以xml文件格式存储的数据

php添加xml数据到xml文件
使用addChild方法,他有两个参数,第一个是添加的节点名,第二个可选添加的值
如:

$x = simplexml_load_file('test.xml')//要添加值到xml首先得解析xml文件
$man = $x->addChild('man');//添加一个man节点
$man->addChild('name','遇');
$man->addChild('age',20);//向man节点添加两个节点,这两个节点填充数据
$x->asXML('test.xml');//将添加的内容写入到xml文件

解析XML内容
要解析XML内容使用simplexml_load_string这个函数会解析xml字符串而不是具体文件

$txt="<root>
<name>test</name>
<!-- 注释内容 -->
</root>"
//
$res=simplexml_load_string($txt,'SimpleXMLElement',LIBXML_NOCDATA);

Xpath规则
Xpath是专门用来查找XML数据内容的一种规则
用来在XML文档中对元素及属性进行遍历
xpath(path)
查找语法

  • 绝对路径查找
    如下XML数据
 <root>
	<man>
		<name>唐僧</name>
		<age>40</age>
	</man>
	<man>
		<name>孙悟空</name>
		<age>23</age>
	</man>
	<man>
		<name>猪八戒</name>
		<age>18</age>
	</man>
	<man>
		<name>沙悟净</name>
		<age>60</age>
	</man>
</root>

通过绝对路径查找man下所有的name

$xmlObj=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);
$res = $xmlObj->xpath('/root/man/name');
var_dump($res);

打印结果,返回数组类型
在这里插入图片描述
通过相对路径查找xml数据中所有的name

$xmlObj=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);
$res = $xmlObj->xpath('//name');
var_dump($res);

使用通配符*查找man下面所有的节点内容

$xmlObj=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);
$res = $xmlObj->xpath('//man/*');
var_dump($res);
foreach ($res as $key => $value) {
	echo $value;
}

返回结果
在这里插入图片描述
条件查找
查找man节点的子节点age=40的数据

$xmlObj=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);
$res = $xmlObj->xpath('//man[age=40]');
var_dump($res);

返回结果 返回数组类型,数组值为属性->值
在这里插入图片描述
其他查找
last()查找最后一个 返回值与条件查找的返回值一样

$xmlObj=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);
$res = $xmlObj->xpath('//man[last()]');
var_dump($res);

在这里插入图片描述
数字查找 返回值与条件查找的返回值一样
如查找第二个

$xmlObj=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);
$res = $xmlObj->xpath('//man[2]');
var_dump($res);

根据属性查找
查找man中有msg属性的记录

$xmlObj=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);
$res = $xmlObj->xpath('//man[@msg]');
var_dump($res);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值