XML详解


0X00-引言

看我不卷死你们(1)(1)

XML学习笔记,配套视频

0X01-XML概述

01-引入

01-XML是什么样的

    
        1
        baidu translate
        3.0
    
    
        2
        你好
        2.1
    
    
        3
        我很好
        3.3
    

02-XML数据格式主要用途有哪些?
  • XML数据格式的主要作用是数据传输

  • 程序之间的数据传输通讯,数据的载体,各编程语言都可以识别

  • 配置文件 config.xml,xml文件在各个语言中具有通用性,可以做配置文件

  • 存储数据,可以当做小型数据库,直接以文件的形式存储数据

  • 规范数据格式,使数据具有结构性

02-什么是XML

  • XML指的是,可扩展标记性语言
  • XML被发明的目的是传输数据和存储数据,而不是展示数据(HTML)
  • XML的标签要具有含义
  • XML是W3C推举的数据传输格式

03-XML与HTML有什么不一样

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

0X02-XML的基本语法

01-语法规则

  • XML必须要有根节点,根节点就是其他所有节点的父级节点
  • XML头部声明,可有可无,最好写上
  • 所有XML元素都必须是成对标签
  • 标签名区分大小写
  • 标签不能交叉

image-20220104110657580

  • 注释符:

image-20220104111141034

  • 特殊字符需要实体转义
转义符 转义内容 说明
& 或 & &
< 或 < < 小于号
> 或 > < 小于号
" " 双引号
  空格
© ? 版权符
® ? 注册符

02-元素属性

  • 属性规则:一个标签可以有多个属性,属性的值必须使用引号括起来

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

  • XML中属性就是鸡肋,因为标签可以自定义

  • 解析XML数据时,属性会带来额外的解析代码(多了一步,比较麻烦)

  • 写法太白和HTML一样

03-CDATA区域

CDATA区域不解析

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

image-20220104121307818

04-XML文档类型声明(DTD)

XML学习网站

XML文档类型声明(俗称DTD)是一种精确描述XML语言的方式。DTD根据适当XML语言的语法规则检查XML文档结构的词汇和有效性。

可以在文档中指定XML DTD,也可以将其保存在单独的文档中,然后单独添加。

01-用法

DTD开始于

02-内部DTD

内部DTD指的是直接在XML文件中声明元素

XML头部声明中的属性standalone="yes"

语法


直接例子分析

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

   
   
   
]>
Tanmay Patil TutorialsPoint (011) 123-4567

头部声明

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

DTD文档类型声明,以

在DTD的正文中可以声明元素,属性,实体和符号





中address为根节点,圆括号内的内容为子节点。

<!ELEMENT name(#PCDATA)>将元素名称定义为“#PCDATA”类型。这里#PCDATA表示可分析的文本数据。

规则:

DTD声明必须放在文档的开头XML头部声明之后,且XML头部声明中standalone="yes"

DTD声明要符合DTD语法

在文档中使用DTD定义的根元素时,其根元素的子节点必须要在DTD声明中定义。

03-外部DTD

外部DTD元素在XML文件之外被声明。可以通过指定可能是合法的.dtd文件或有效URL 的系统属性来访问它们。要将其称为外部DTD,XML声明中的独立属性必须设置为no。这意味着声明包括来自外部来源的信息。

XML文档的头部声明设置为

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

外部DTD的语法为


其中file-name是.dtd扩展名的文件

实例:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

Tanmay Patil TutorialsPoint (011) 123-4567

第一行为XML头部声明,注意standalone="no"与内部DTD声明不同

第二行SYSTEM为系统标识符,指向外部文件的位置

01-系统标识符

语法

引用外部文件


它包含关键字SYSTEM和指向文档位置的URI

02-公共标识符

公共标识符提供了一种定位DTD资源的机制


它以关键字PUBLIC开始,后跟一个专门的标识符。公共标识符用于标识目录中的条目。公共标识符可以遵循任何格式,但是常用的格式称为正式公共标识符或FPI。

04-声明实体格式

在DTD中进行实体声明时,将使用ENTITY关键字来声明。实体是用于定义引用普通文本或特殊字符的快捷方式的变量。实体可在内部或外部进行声明。

内部声明实体格式:


引用外部实体格式:


0X03-使用PHP解析XML

XML是一种数据传输格式,当PHP接收到的数据就是一段XML的时候,怎么用PHP出来XML数据呢?

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

01-XML解析原理

PHP解析XML共分为3步:

  • 读取XML文档到内存
  • 形成DOM树
  • 由DOM树生成对象并返回

02-SimpleXML类库

xml:image-20220104130353991

image-20220104131136804

simplexml解析:

image-20220104130630993

分析解析后的数据:

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) "55" } } } 

image-20220104131523604

simplexml.php:从xml中提取“尽兴”,simplexml解析生成数组,尽兴的数组下标为0image-20220104130443593

image-20220104130509279

03-遍历XML数据

遍历标签name的内容

foreach循环:

echo $x->man[0]->name;foreach($x->man as $v){   echo $v->name;}

for循环:

$c = count($x->man);for ($i=0;$i<$c;$i++){	echo $x->man[$i]->name;}

image-20220104144703886

image-20220104144715748

04-添加节点

运用PHP里面的方法添加节点

<?php//simple_load_file解析XML文档,返回PHP对象$x = simplexml_load_file('test.xml');//对象中的addChild创建节点并给创建后的节点添加内容$man = $x -> addChild('man');$man->addChild('name','玉帝');$man->addChild('age','999');var_dump($x);//将添加后的对象重新解析成XML文档,写入文件$x->asXML('test.xml');

image-20220104151916880

添加成功

image-20220104152133837