XML学习

本文介绍了XML的基本概念、语法以及在数据传输中的作用。详细讲解了PHP如何使用SimpleXML类库来解析XML文档,通过示例展示了读取、遍历和创建XML节点的方法。此外,还提及了XPath语言在查找XML数据中的应用。

Lodash中文文档
swiper官网

XML概述

XML(Extensible Markup Language)是一种类似于 HTML,但是没有使用预定义标记的语言。因此,可以根据自己的设计需求定义专属的标记。这是一种强大将数据存储在一个可以存储、搜索和共享的格式中的方法。最重要的是,因为 XML 的基本格式是标准化的,如果你在本地或互联网上跨系统或平台共享或传输 XML,由于标准化的 XML 语法,接收者仍然可以解析数据。

有许多基于 XML 的语言,包括 XHTML、MathML、SVG、RSS 和 RDF (en-US)。你也可以创建自己的。

引入

示例:

<?xml version="1.0" encoding="UTF-8"?>
<message>
    <warning>
        Hello World
    </warning>
</message>

像 HTML 一样,XML 为一些特别预留的符号定义了一些方法,称为实体(entities),例如用于标记的大于号。下面是五个你必须知道的符号:

实体符号描述
&lt;<小于符号
&gt;>大于符号
&amp;&
&quot;"一个双引号
&apos;一个单引号

XML 数据格式最主要的功能就是 数据传输

XML数据格式主要的用途又有哪些?

程序之间的数据传输通讯

PHP 语言<-快递 100 <-Java

语言配置文件 config.xml

config.xml->php 语言、java 语言、Python 语言

存储数据,充当小型数据库

data. xml

规范数据格式,使数据具有结构性,易读易处理

虽然我们知道了这是 XML,也知道用来做什么,但是,我们还是不会使用……

知己知彼,百战不殆;想要更好的使用XML,我们需要对XM做一个彻底的了解;

什么是XML

XML 指的是,可扩展性标记语言;

XML 被发明的目的是传输和存储数据,而不是展示数据;

XML 的标签必须自定义,但是在写标签名的时候一定要有含义;

XML 是W3C推荐的数据传输格式;

如何创建xml文件?

  1. 创建后缀为 .xml 的文件
  2. 添加 root 根节点
  3. 添加自定义节点,写入数据
<root>
    <user>大哥</user>
    <msg>114514</msg>
</root>

XML 和HTML 有哪些不一样?

  1. HTML 标签不能自定义;XML 标签只能自定义;
  2. HTML 语法要求不严格;XML 语法要求极其严格,必须是成对标签;
  3. HTML 用来展示数据; XML 用来传输和存储数据;

XML的基本语法

语法规则

XML 必须有根节点;
根节点就是其他所有节点的父级节点

<?xml version="1.0" encoding="UTF-8"?>
<suibianxie>aaa</suibianxie>
<bajie>bbbb</bajie>
<!--错误示范:-->
<!-- <bajie>bbb -->
<!-- <A> ccdd </a> -->
<!-- <a> ccc <d> ddd </a> </d>  -->

version:版本号;endoding:文件编码

XML头声明,可有可无,但建议书写。

  1. 所有标签必须成对
  2. 标签名区分大小写
  3. 标签不能交叉书写
  4. 特殊字符使用实体转义

元素属性

属性规则:一个标签可以有多个属性,属性值必须使用引号;

命名规则:字母、数字、下划线,数字不能开头;

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

XML中属性就是鸡肋(食之无肉,弃之有味);

还有,在解析XML时,属性会带来额外的代码解析(多了一步,比较麻烦);

CDATA

<![CDATA[ ...不解析的内容... ]]]>

注意:特殊字符较少时,使用实体替换,较多时使用 CDATA (必须大写)

使用PHP解析XML

XML是一种数据传输格式,当 PHP 接收到的数据就是一段 XML 的时候,我们的 PHP 应该怎么处理 XML 数据呢?

在PHP5版本以后,其提供了一个非常非常强大的类库, SimpleXML 类库,专门用于实现对 XML 文档的解析操作。

XML解析原理

PHP 解析 XML 共分为 3步:

  1. 读取 XML 文档到内存;
  2. 形成 DOM树;
  3. 由 DOM树生成对象并返回;

SimpleXML类库

02-语法.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <man>
        <name>金星</name>
        <age>36</age>
    </man>
    <man>
        <name>太白</name>
        <age>36</age>
    </man>
</root>

SimpleXML.php文件内容:

<?php
/*
 * @Description: 
 * @Author: NavyPeng
 * @Date: 2023-07-27 16:05:41
 * @LastEditTime: 2023-07-27 16:11:29
 * @LastEditors: NavyPeng
 */
// file_get_contents("02-语法.xml");

// simplexml_load_file 解析XML文档,返回PHP对象
$x = simplexml_load_file('02-语法.xml');

var_dump($x);

echo $x->man[0]->name;
  1. 调用simplexml_load_file函数,解析XML生成的对象;
  2. PHP将XML节点以属性的形式存放
  3. 内容如果有多条,以数组形式存放
  4. 数组的值就是解析后的节点名字和内容,以对象属性的形式存放

SimpleXML.php 运行结果:

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) "46"
        }
    }
}
金星

遍历XML数据

<?php
/*
 * @Description: 
 * @Author: NavyPeng
 * @Date: 2023-07-27 16:38:12
 * @LastEditTime: 2023-07-27 16:49:25
 * @LastEditors: NavyPeng
 */
$x = simplexml_load_file('02-语法.xml');

// for 循环获取XML数据
$c = count($x->man);
for($i = 0; $i < $c; $i++){
    echo $x->man[$i]->name;
}

// foreach 循环获取XML数据
foreach($x->man as $v){
    echo $v->name;
}

// 对象中的addChild方法创建节点
$man = $x->addChild('man');
// 对象中的addChild方法创建节点并给创建后的节点添加内容
$man->addChild('name','玉皇大帝');
$man->addChild('age','114514');

var_dump($x);
// 将添加后的对象重新解析成XML文档,写入文件
$x->asXML('02-语法.xml');

案例

查询城市天气

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="05-anli.php" method="get">
        城市:<input type="text" name="" value=""><br>
        <input type="submit" name="city" id="查询">
    </form>
</body>
</html>
  1. 获取HTML表单数据
  2. 获取XML数据
  3. 将网络数据读成字符串
  4. 获取XML字符串数据
  5. 获取XML数据
  6. 展示XML数据
<?php
$city = $_GET['city'];

// 参数接收XML文件,文件地址
// $x = simplexml_load_file('http://v.juhe.cn/weather/index?cityname=%E5%8c%97%E4%BA%AC&dtype=xml&format=&key=810c3b2c488bc37d5f521196d8799a72');
// var_dump($x);

$s = file_get_contents('http://v.juhe.cn/weather/index?cityname='.$city'&dtype=xml&format=&key=810c3b2c488bc37d5f521196d8799a72');
$x = simplexml_load_string($s);// 参数接收XML内容,而不是文件地址

$t = $x->result->today;

echo '气温:'.$t->temperature.'<hr>';
echo '天气:'.$t->weather.'<hr>';
echo '风向:'.$t->wind.'<hr>';
echo '城市:'.$t->city.'<hr>';
echo '建议:'.$t->dressing_advice.'<hr>';

Xpath语言

XPath:是一门专门用来查找XML数据内容的一门语言;

用来在XML文档中对元素及属性进行遍历;

使用及语法

<?php
$x = simplexml_load_file('06-xml.xml');

// xpath 查找后返回 数组, 数组中的值仍然是个 对象
// $d = $x->xpath('/root/man/name');    // 参数为路径  以 / 开始的 绝对路径查找
// var_dump($d);

// $d = $x->xpath('//name'); // 相对路径查找

// 使用 * 匹配所有节点
// $d = $x->xpath('//man/*'); // 查找 man 下 所有节点

// foreach($d as $v){
//     echo $v;
// }

// 条件查找
// $d = $x->xpath('//man[age<120]'); // age小于120 的节点
// $d = $x->xpath('//man[last()]');  // 最后一个节点
// $d = $x->xpath('//man[1]');       // 第一个节点
$d = $x->xpath('//man[@msg]');  // 查找有msg属性的节点 
var_dump($d);

HTML学习
Web移动端学习
JS基础学习
Web API学习
JS进阶学习
ajax学习
Node.js与Webpack学习
Git学习
vue学习—更新中
小程序学习—学习中
XML教学视频

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值