自学XML,学习笔记

如有错误,还请大家批评指正!

第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分为三步:

  1. 读取XML文档到内存;
  2. 生成DOM树;
  3. 由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]');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值