XML

什么是XML?

XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它被设计为具有自我描述性(标签自定义),具有良好的可读性,并且可用于各种应用程序和平台。

基本语法

  1. 必须有根节点

<root>
    ......
</root>
  1. 头声明可有可无

<?xml version="版本号" encoding="字符集" ?>
  1. 所有XML元素都必须是成对标签

  2. 标签名大小写敏感

  3. 标签不能交叉书写,例如:

<a>test<b></a></b>
  1. 特殊字符使用实体转义

属性

属性就是表示标签自身的一些额外信息

<root>
    <people>
        <name age="18">Cristrik010</name>
    </people>
</root>

属性规则:

  • 一个标签可以有多个属性,属性的值必须使用引号包裹

  • 命名只能使用数字字母下划线,数字不能开头

CDATA

当我们的数据量很大时,就不可避免会出现很多特殊字符,但是我们替换成实体又很麻烦。所以使用CDATA就能方便很多。

<![CDATA[ 这里面的数据不会被解析,也就不会报错! ]]>

使用PHP解析XML文档

PHP5版本之后提供了一个强大的库:SimpleXML类库,专门用于实现对XML文档进行解析。

<?php
    $a = simplexml_load_file('文件地址'); //解析XML文档,返回PHP对象
?>

原理

PHP解析XML分为3步:

  1. 读取XML文档到内存中

  2. 形成DOM树,树中同层且标签名相同的以数组形式存储。

  3. 由DOM树生成对象并返回

例如:

<root>
    <people>
        <name>test1</name>
        <age>18</age>
    </people>
    <people>
        <name>test2</name>
        <age>19</age>
    </people>
</root>

这里画了两个图方便理解:

image-20230817220224004

遍历XML数据

<?php
    $a = simplexml_load_file();
    // 方法一:
    foreach($a->people as $b){
        echo $b->name;
    }
    // 方法二:
    for($i = 0;$i < count($a->people);$i++){
        echo $a->people[$i]->name;
    }
?>

添加节点

<?php
    $a = simplexml_load_file('test.xml');
    $test = $a->addChild('people');
    $test->addChild('name','Cristrik010');
    $test->addChild('age','18');
	// 保存到xml文件中
	$a->asXML('test.xml');

Xpath语言

什么是Xpath?

XPath(XML Path Language)是一种用于在 XML 文档中定位和选择节点的查询语言。它提供了一种简洁而强大的方式来遍历 XML 树并从中提取数据。

一个简单的使用

<?php
    $a = simplexml_load_file('test.xml');
	$b = $a->xpath('/root/people/name'); // 绝对路径
	foreach($b as $c){
        echo $c;
    }

语法规则

绝对路径

$b = $a->xpath('//name'); 

相对路径

$b = $a->xpath('/root/people/name');

通配符

// 匹配people节点下的所有子节点
$b = $a->xpath('//people/*');

最后一个节点

$b = $a->xpath('//people[last()]');

条件查找

$b = $a->xpath('//people[age>100]');
// 寻找带有属性的标签,例如:<people test=""></people>
$b = $a->xpath('//people[@test]');