【XML学习笔记】XML简介及基本使用

0x00 前言

文章中的文字可能存在语法错误以及标点错误,请谅解;

如果在文章中发现代码错误或其它问题请告知,感谢!

0x01 XML简介

1 设计XML格式语言原因

例如每个网站的天气预报的展现形式不一样,不过从气象局获取的数据都是一样的,但是每个网站的端页面有可能由php、Java、html5等语言编写,此时需要可以针对多个页面平台的可识别格式的天气预报信息,XML格式语言由此被发明出来。

一段标准的XML格式天气数据信息:
在这里插入图片描述

2 什么是XML

XML指可扩展标记语言(eXtensible Markup Language);
XML容易学习;
XML被发明的目的是传输和存储数据,而不是展示数据;
XML的标签必须自定义,但是在写标签名的时候一定要有含义(类似变量名定义);
XML是V3C推举的数据传输格式。

XML实例:

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>HanMeiMei</to>
  <from>LiWei</from>
  <heading>Reminder</heading>
  <body>You are mine and Only!</body>
</note>

3 XML与HTML区别

XML最主要的功能是数据传输配置文件config.xml储存数据当作小型数据库,HTML旨在显示数据;

HTML标签不能自定义,XML标签只能自定义;

HTML语法要求不严格;XML语法要求严格,必须是成对标签;

XML用来传输和存储数据,HTML用来展示数据。

0x02 XML基本语法

1 语法规则

1)必须有根节点
根节点就是其它所有节点的父节点:

<root>
<whatever>……</whatever>
<thanks>^</thanks>
</root>

2)XML头声明:不强制要求,可有可无,但是建议写
版本号,文件编码

<?xml version = "1.0" encoding="utf-8"?>
<root>
<whatever>……</whatever>
<thanks>^</thanks>
</root>

3)所有XML元素都必须是成对标签

<?xml version = "1.0" encoding="utf-8"?>
<root>
<whatever>……</whatever> 正确
<thanks>^</thanks>      正确
<a>ddd</b>              错误
</root>

4)标签名大小写敏感

<?xml version = "1.0" encoding="utf-8"?>
<root>
<whatever>……</whatever> 正确
<thanks>^</thanks>      正确
<a>ddd</A>              错误
</root>

5)标签不能交叉

<?xml version = "1.0" encoding="utf-8"?>
<root>
<whatever>……</whatever> 正确
<thanks>^</thanks>      正确
<a>ddd<b>hh</a></b>     错误
</root>

6)特殊字符使用实体转义
在 XML 中,一些字符拥有特殊的意义。若把字符 < 放在 XML文件中,则会生错误,这是因为解析器会把它当作新元素的开始。

下例是产生XML解析错误:
<message>if salary < 1000 then</message>

为了避免这个错误可以用实体引用来代替< 字符:
<message>if salary &lt; 1000 then</message>

在 XML 中,有 5 个预定义的实体引用:

&lt;<小于
&gt;>大于
&amp;&
&apos;单引号
&quot;"双引号

7)属性标签
一个标签可以有多个属性,属性的值必须使用双引号或单引号;

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

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

<?xml version = "1.0" encoding="utf-8"?>
<root>
    <man>
        <name>王晴川</name>
        <age>36</age>
    </man>
    <man>
        <name age = "38">王晴川</name>
    </man>
</root>

2 CDATA 忽略解析

在上一节中特殊字符使用实体转义方法对特殊字符进行转义,但是若包含特殊字符(<&)较多时,可以使用CADTATA进行忽略解析。

语法:<![CDATA[……不需要解析的内容……]]>

CDATA 部分中的所有内容都会被解析器忽略,例如:

<?xml version = "1.0" encoding = "utf-8"?>
<root>
    <man>
        <name>数学题</name>
        <![CDATA[2 < 4 5 < 6 3 < 6]]>
    </man>

    <man>
        <name age = "28">李白</name>
    </man>
</root> 

0x03 使用PHP解析XML文档

1 解析实现

在PHP5版本以后,其提供了一个非常强大的类库,SimpleXML类库,专门用于实现XML文档解析操作。simplexml_load_file() 函数把 XML 文档载入对象中。

语法:simplexml_load_file(file,class,options,ns,is_prefix)
如果失败,则返回 false。

例:
现在有一个待解析的xml文件,命名为3.1.xml:

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

若要将3.1.xml中的第一个名字解析出来,php代码如下:

<?php
if (file_exists('3.1.xml'))
{
    $x = simplexml_load_file('3.1.xml');
    var_dump($x);

    echo $x->man[0]->name;
}
else
{
    exit('Error.');
}
?> 

运行结果如下:
在这里插入图片描述

2 解析原理

解析XML共分为3步:
1.读取XML文档到内存;
2.形成DOM树;
3.由DOM树生成对象并返回。

3 遍历及增加节点

若要解析3.1.xml所有name,则使用遍历方法,php代码如下:

<?php
if (file_exists('3.1.xml'))
{
    $x = simplexml_load_file('3.1.xml');
       foreach($x->man as $v){
        echo $v->name;
    }

}
else
{
    exit('Error.');
}
?> 

若在3.1.xml需要增加新节点man,例如“玉帝”“999”,则在php代码如下:

<?php
$x = simplexml_load_file('3.1.xml');
//对象中的addChild方法创建节点
$man = $x->addChild('man');
//对象中的addChild方法创建节点并给创建后的节点添加内容
$man->addChild('name','玉帝');
$man->addChild('age', '999');

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

4 Xpath语言

Xpath是一门专门用来查找XML数据内容的语言,用来在XML文件中对文件或属性进行遍历。

1) 使用绝对路径查找

例:
xml为上节中的3.1.xml,使用绝对路径查找所有name节点,php代码为:

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

$d = $x->xpath('/root/man/name');

foreach($d ad $v){
  echo $v;
}
?>

2) 使用相对路径查找

例:
xml为上节中的3.1.xml,使用相对路径查找所有name,php代码为:

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

$d = $x->xpath('//name');

foreach($d ad $v){
  echo $v;
}
?>

3) 使用*匹配所有

例:
xml为上节中的3.1.xml,使用*匹配所有name节点,php代码为:

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

$d = $x->xpath('//man/*');

foreach($d ad $v){
  echo $v;
}
?>

4) 条件查找

例:
xml为上节中的3.1.xml,条件查找age小于120的name,php代码为:

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

$d = $x->xpath('//man/[age<120]');

foreach($d ad $v){
  echo $v->name;
}
?>

以上。

参考资料:
1.B站:XML教学视频!(黑马程序员精讲 XML 知识!)
2.https://www.runoob.com/xml/xml-tutorial.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值