如有错误,还请大家批评指正!
第1章 XML概述
1.1引入
各个网站上都会有天气显示,网站需要向国家气象局申请获取数据,而且各网站开发语言可能不同,于是就会面临着数据格式的问题,这时候就会用到XML。
XML数据格式最主要的功能为 数据传输。
XML数据格式主要用途有:
- 程序之间的数据传输通信,如PHP<-快递100<-java;
- 配置文件config.xml,如一个大型网站不会只使用一种开发语言;
- 存储数据,充当小型数据库,Data.xml。
1.2 什么是XML
XML指的是可扩展性标记性语言。(HTML就是一种标记性语言)
XML被发明的目的是为了传输和存储数据,并不是为了展示数据。
XML的标签必须自定义,但是标签的名称一定要有含义。
XML是W3C推举的数据传输格式。
如何自己来写一段XML呢?
文件名称随便,但是后缀名一定要是XML。
XML中一定要有一个根节点<root></root>。
<root>
<user>用户</user>
<msg>您好!</msg>
</root>
XML和HTML有哪些区别?
- XML标签只能自定义,因为官方没有标准,而HTML不能自定义;
- HTML语法要求不严格,XML语法要求极其严格,标签必须为成对标签;
- XML用来传输、存储数据,HTML用来展示数据
第2章 XML的基本语法
2.1语法规则
- XML必须有根节点,根节点为其他所有节点的祖先。而根节点不一定非得命名为root,只是编程中的习惯将之命名为root。
- XML头声明:可有可无,但是建议写上,因为其中包含编码方式。(不包含在根节点中)
<?xml version="1.0" encoding="utf-8" ?>
- XML标签名必须成对出现,区分大小写;且标签不能交叉。
<A>my study notes</A> <!--标签成对出现,正确-->
<A>my study notes</a> <!--区分大小写,故A 与 a是不同的标签,错误-->
<a>my study notes <b>good</b> </a> <!--这就是标签交叉,也是错误的-->
- XML的注释方法 <!-- balabala -->
- 在编写过程中需要用符号时,使用实体转义:
2.2属性
属性就是用来表述这个标签额外的一些信息的。
<?xml version="1.0" encoding="utf-8" ?>
<root>
<student>
<name>欢欢</name>
<age>16<age>
</student>
<student>
<name age="16">欢欢</name> <!-- 此时age就为name标签的属性 -->
</student>
</root>
一个标签可以有多个属性,属性的值必须用双引号或者单引号引起来。
属性的命名规则:可以使用数字字母下划线,不能用数字作为开头。
2.3CDATA
如果标签内容中许多需要进行实体转义的符号,可以使用<![CDATA[ ① ]]>,将内容放置①的位置,这样编译器就不会对其中的内容进行解析了。
<?xml version="1.0" encoding="utf-8" ?>
<root>
<msg>
<![CDATA[有一道数学题:当x在x<0时,y为y>5;当x=0时,y为y<-7。]]>
</msg>
</root>
注:当特殊字符较少时,可以用实体转义,当特殊字符较多时,采用CDATA(CDATA必须大写)。
第3章 使用PHP来解析XML
PHP:超文本预处理器。
在PHP5版本后,官方为我们提供了一个非常强大的类库,叫SimpleXML,专门用来解析XML。
3.1XML解析原理
PHP解析XML分为三步:
- 读取XML文档到内存;
- 生成DOM树;
- 由DOM树生成对象返回。
<?php
//使用simplexml_load_file解析XML文档,返回PHP对象
$x = simplexml_load_file('XML文档名称');
//将x全部代码显示出来
var_dump($x);
//指取出我们想要的元素,man为标签名称
echo $x->man[0]->name;
?>
- SimpleXML知识点补充:
SimpleXML虽然只提供了几个函数,但是功能十分强大,使用起来也非常方便。
SimpleXML可以把XML 文档(或 XML 字符串)转换为对象,比如:
元素被转换为 SimpleXMLElement 对象的单一属性。当同一级别上存在多个元素时,它们会被置于数组中。
属性通过使用关联数组进行访问,其中的索引对应属性名称。
元素内部的文本被转换为字符串。如果一个元素拥有多个文本节点,则按照它们被找到的顺序进行排列。
————————————————
- SimpleXML操作简要总结
simplexml_load_file() 从 XML 文档获取 SimpleXMLElement 对象。
simplexml_load_string() 从 XML 字符串获取 SimpleXMLElement 对象。
simplexml_import_dom() 把 DOM 节点转换为 SimpleXMLElement 对象。
(以上3个加载函数返回SimpleXMLElement对象,其路径在根标记上)
addAttribute() 给 SimpleXML 元素添加一个属性。
addChild() 给 SimpleXML 元素添加一个子元素。
asXML() 从 SimpleXML 元素获取 XML 字符串。
attributes() 获取 SimpleXML 元素的属性。
children() 获取指定节点的子。
getName() 获取 SimpleXML 元素的名称。
xpath() 对 XML 数据运行 XPath 查询。
————————————————
原文链接:https://blog.csdn.net/wpfphp/article/details/51176997
- 另外几种XML解析方式包括:DOM 解析;SAX 解析;JDOM 解析;DOM4J 解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于 Java 平台。
- IDEA对XML的解析,使用的是Dom4j
3.2遍历XML数据
<?php
//使用simplexml_load_file解析XML文档,返回PHP对象
$x = simplexml_load_file('XML文档名称');
//foreach循环获取XML
foreach($x->man as $v)
echo $v->name;
//for循环获取XML
$num = count($x->man);
for($i=0;$x=i<$num;$i++){
echo $x->man[$i]->name;
}
?>
3.3添加节点
第一个为想添加的节点的名称,第二个为节点的值,可选择。
<?php
//使用simplexml_load_file解析XML文档,返回PHP对象
$x = simplexml_load_file('XML文档名称');
//创建一个新的对象,比如此文档中有man的对象
$person = $x->addChild("man");
//给新创建名为person的man类对象,添加子节点name和age
$person->addChild("name",Jelly);
$person->addChild("age",18);
//此时,新添加的对象还没有被写入XML中
//将修改过后的对象重新解析到XML中,写入文件
$x->asXML('XML文档名称');
?>
第4章 XPath语言
4.1XPath概述
什么是XPath?
是一门专门用来查询XML数据的语言,用来对XML文档中的对象及属性进行遍历。
4.2使用及语法
可以使用以下方式来查找XML中的对象:
- 绝对路径查找
<?php
$x = simplexml_load_file('文件名.xml');
$absolute = $x->xpath('/root/man/name'); // 以“/”开始的为绝对路径查找
?>
- 相对路径查找
<?php
$x = simplexml_load_file('文件名.xml');
$objective = $x->xpath('//name'); // 以“//”开始的为相对路径查找,
//只要是在这个xml文档中为name的都要
?>
- 用 "*" 来查找所有的内容(类似于MySQL中select语句的*)
<?php
$x = simplexml_load_file('文件名.xml');
//只要是man标签下的节点,都会显示出
$d = $x->xpath('//man/*');
?>
- 条件查找
想查找符号条件年龄的对象:
$d = $x->xpath('//man[age<30]');
想查找最后一个对象:
$d = $x->xpath('//man[last()]');
想查找第一个对象:不是数组下标1,而就是排列中的第一个
$d = $x->xpath('//man[1]');
想查找含有某个属性的节点
//以包含msg属性的节点为例
$d = $x->xpath('//man[@msg]');