XML学习笔记

第一章XML概述

1.1XML简介

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

一段标准的XML格式天气数据信息:

1.2 什么是XML

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

<?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>

1.3 XML与HTML区别

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

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

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

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

 

第二章 XML基本语法

2.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; " 双引号

自定义实体

2.2属性标签

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

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

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

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

2.3 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> 

第三章 使用PHP解析XML文档

3.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.');
}
?> 

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

3.2 解析原理

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

3.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

转自:https://blog.csdn.net/wangqingchuan92/article/details/116001036

posted @ 2021-07-04 13:57  北极星!  阅读(73)  评论(0编辑  收藏  举报