摘要:声明语句是可选部分如果存在需要放在文档的第一行所谓的文档声明就是告诉解析器当前文档格式版本号以及编码格式。所有的元素都必须是成对闭合标签非闭合标签是非法的,解析器将报错,不无正常解析标签对大小写敏感必须头尾标签一致。
前言
一直想系统性的学XML,就没时间学,今晚抽出几个小时时间学完了XML。过几天再过来看看,背一背应该就差不多,记得东西较多,没什么难理解的。
XML数据传输格式 第一章 XML概述 1.1 引入当我们看到 XML 标准突飞猛进的开发进度,以及大批的软件开发商采用这个标准的日新月异的速度时,真的是不禁感叹这真是令人叹为观止。
目前,XML 在 Web 中起到的作用不会亚于一直作为 Web 基石的 HTML。
XML 无所不在。XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。
XML的主要用途有哪些?
1.程序之间的数据传输通讯(可以是跨语言传输)2.配置文件config.xml
3.存储数据,充当小型数据库
优势:
规范数据格式,是数据具有结构性,易读易处理1.2 什么是XML
XML 指可扩展标记语言(eXtensible Markup Language),被设计用来传输和存储数据;XML 需要自行定义标签,且标签名称具有自我描述性;XML 是 W3C 推荐的数据传输存放标准。
XML和HTML的区别?
1.html标签不能自定义,XML只能自定义标签。第二章 XML的基本语法 2.1 语法规则2.html语法要求不严格,xml对于语法的要求非常严格,标签必须是闭合的。
3.XML 被设计用来传输和存储数据,其焦点是数据内容;HTML 被设计用来显示数据,其焦点是数据的外观呈现。
1.XML 文档必须有根元素,根元素是所有其他元素的父元素。
2.XML声明语句是可选部分,如果存在需要放在文档的第一行
所谓的文档声明就是告诉解析器当前文档格式、版本号以及编码格式。
3.所有的 XML 元素都必须是成对闭合标签;非闭合标签是非法的,解析器将报错,不无正常解析.
4.XML 标签对大小写敏感,必须头尾标签一致。
5.XML标签不允许有交叉嵌套,也就是父子标签关系不能交叉嵌套。
6.XML标签名不要使用特殊字符,尽量只用数字字母下划线。
7.XML 中的注释与HTML中注释一个语法格式。
8.实体引用 & 特殊字符
在 XML 中,一些字符拥有特殊的意义,如果您把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始46 < 100 这样会产生 XML 错误;为了避免错误,要用实体引用来代替特殊字符,格式与HTML中的实体字符用法一样
实体引用 | 实体字符 | 含义 |
---|---|---|
< | < | 小于-less than |
> | > | 大于-greater than |
& | & | 与--ampersand |
&apos | " | 单引号-apostrophe |
" | " | 双引号-quotation mark |
XML 元素中,可以随意添加一个或多个属性,前提是
属性值一定要用引号(单引号或双引号)引起来属性名称的命名规范与元素的命名规范相同
元素中的属性是不允许重复的
属性也是用来存储数据信息的但实际开发经验是 在HTML中,属性用起来很便利,而在 XML 中,应该尽量避免使用属性,原因是
1.一个属性不能包含多个值(元素可以)2.属性值不能是结构化数据(元素可以)
3.属性不容易扩展(为未来的变化)
4.属性难以阅读和维护。
总结:将数据放在属性中和放在子元素中,目的都是为了传输数据,而子元素更加容易被解析,更好维护,更便于引用。
2.3 CDATA要处理大量特殊字符时,不能再用实体引用来处理了(主要是太麻烦,工作量大)可以使用CDATA将数据包裹就可以按原格式输出。
格式:5,问:c和d那个更好看? ]]>
实体引用和CDATA的使用时机:
1.对于内容比较少的情况,可以使用实体引用对特殊字符进行直接替换操作。第三章 使用PHP解析XML文档2.对于内容比较多的情况,建议采用CDATA区段。
在PHP5版本以后,其提供了一个非常非常强大的类库,SimpleXML类库,专门用于实现对XML文档的解析操作。PHP中使用这个类库来处理XML数据。3.1 XML解析原理
XML在解析时一共要经历三个步骤:
3.2 SimpleXML类库读取XML文档到内存
2.形成DOM树结构(DOM树可以简单理解文档的父子结构)
3.生成SimpleXML对象
语法:simplexml_load_file("test.xml");
aklman 20 男 ak 22
$xml=simplexml_load_file("test.xml");//引入文件并读取 var_dump($xml);//输出,输出个格式就是一个对象
1.如果当前读取的节点是对象就通过->来进行访问;3.3 遍历XML数据2.如果当前读取的节点是数组就通过[]来进行访问;
1.foreach循环遍历
$xml=simplexml_load_file("test.html); foreach($xml->man as $v){ echo "Name:".$v->name."Age:".$v->age."
"; }
2.for循环遍历
$xml=simplexml_load_file("test.html); $length=count($xml); for($i=0;$i<$length;$i++){ echo $xml->man[$i]->name; }
读取节点的属性时XML属性要加到父节点,PHP才能解析
$xml=simplexml_load_file("test.xml"); echo $xml->man[1]->attributes()->sex; //attributes()方法是用来获取节点属性, //内存中节点属性存放在attributes中,它是一个以为数组,可以使用attributes()方法获取3.4 使用SImpleXML增加节点
$xml=simplexml_load_file("test.html); $man= //创建添加子节点 $man = $xml->addChild("man"); //为节点添加属性 $man->addAttribute("sex","女"); //创建添加子节点及节点值 $man->addChild("name","aklman"); $man->addChild("age","23"); var_dump($xml);//打印,已经添加到内存 $xml->asXML("test1.xml");//保存数据进XML文件,没有文件,则创建;3.5 案例
查询手机归属地案例,数据来源聚合网
//接受前台提交的数据 $tel = $_GET["num"]; //组装请求地址 $url = "http://v.juhe.cn/telephone/index?telephoneNumber=".$tel."&dtype=xml&format=&key=810c3b2c488bc37d5f521196d8799a7211";//地址已经打乱了,需要从聚合网购买 //发送请求并接受返回的数据 $s = file_get_contents($url); // echo $s; //打印返回的XML数据 //使用 simplexml_load_string 函数读入并解析XML数据 $xml = simplexml_load_string($s); //找到并打印我们想要的数据 echo "归属省:".$xml->result->place->city111."第四章 Xpath语言 4.1 概述
"; echo "归属城市:".$xml->result->place->city."
";
XPath是一门在 XML 文档中查找信息的语言,XPath可用来在 XML 文档中对元素和属性进行遍历。4.2 使用及语法
使用注意事项:
1.使用绝对路径实现数据查询
$xml = simplexml_load_file("user.xml"); //按节点的绝对路径查找 $data = $xml->xpath("/user/man/name");//返回数组 foreach($data as $v){ echo $v."
"; } /* *如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径, *绝对路径实现数据查询必须一级一级的查询下去,不能越级。 */
2.使用相对路径实现数据查询
$xml = simplexml_load_file("user.xml"); //按节点的相对路径查找 $data = $xml->xpath("//name");//返回数组 foreach($data as $v){ echo $v."
"; } /* *如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系) */
3.使用*来匹配所有节点
$xml = simplexml_load_file("user.xml"); //匹配man节点下的所有元素节点。 $data = $xml->xpath("//man/*");//返回数组 foreach($data as $v){ echo $v."
"; }
4.使用[]方括号的形式来实现数据查询
$xml = simplexml_load_file("user.xml"); //匹配man节点下的最后一个节点。 $data = $xml->xpath("//man[last()]");//返回数组 var_dump($data); echo $data[0]->name; //man[1] : 获取第一个man元素 //man[last()]:获取最后一个man元素 //man[age > 200] :获取age>200的man节点 /* *方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置 *默认从1开始,而last()函数则表示选择集中的最后一个元素,括号内还可以放置表达式 */
5.使用属性来获取元素
$xml = simplexml_load_file("user.xml"); //匹配man节点下含有sex属性的节点。 $data = $xml->xpath("//man[@sex]");//返回数组 var_dump($data); echo $data[0]->name;参考资料
W3school
菜鸟教程
XML编程与应用教程(第2版)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28398.html
摘要:声明语句是可选部分如果存在需要放在文档的第一行所谓的文档声明就是告诉解析器当前文档格式版本号以及编码格式。所有的元素都必须是成对闭合标签非闭合标签是非法的,解析器将报错,不无正常解析标签对大小写敏感必须头尾标签一致。 前言 一直想系统性的学XML,就没时间学,今晚抽出几个小时时间学完了XML。过几天再过来看看,背一背应该就差不多,记得东西较多,没什么难理解的。 XML数据传输格式 第一...
摘要:以指定模式分割字符串,返回结果为数组。为什么牢记,有什么用看代码查找连续的相同的数字或者内容是用子表达式只有字表达是中匹配的内容才保存到缓存,这种行为叫捕获。 前言 正则表达式之所以强大,是因为其能实现模糊匹配,精确匹配没有任何价值。 正则表达式学习笔记 第一章 JavaScript原型对象与原型链 1.1 正则表达式概念 RegExp:是正则表达式(regular expressio...
摘要:比较运算符,操作数都不是类型时操作数中只有类型和类型,或者其中有一个是转换为运算条件运算转换为号运算,其中一个操作符为字符串比较运算,其中一个操作符为字符串 要求:学习,并背诵全文 原始值 类型 Undefined Null String Boolean Number 值 undefined null 所有字符串 true false 所有数字/NaN 引用类型 Objec...
摘要:学习笔记工作以来就一直在用各种框架,比如,这些,向外提供接口都很方便,但是一直在想它的内部是怎样对外暴露服务的,正好之前学习基础的时候也没好好看这块,抽个时间学习总结一下,也能更好的理解掌握现在的框架。 Servlet学习笔记 工作以来就一直在用各种web框架,比如SpringMVC,Spring Cloud这些,向外提供接口都很方便,但是一直在想它的内部是怎样对外暴露服务的,正好之前...
摘要:实战高并发程序设计推荐豆瓣评分书的质量没的说,推荐大家好好看一下。推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。 很早就想把JavaGuide的书单更新一下了,昨晚加今天早上花了几个时间对之前的书单进行了分类和补充完善。虽是终极版,但一定还有很多不错的 Java 书籍我没有添加进去,会继续完善下去。希望这篇...
阅读 1789·2021-08-19 11:12
阅读 1373·2021-07-25 21:37
阅读 946·2019-08-30 14:07
阅读 1240·2019-08-30 13:12
阅读 622·2019-08-30 11:00
阅读 3501·2019-08-29 16:28
阅读 954·2019-08-29 15:33
阅读 2926·2019-08-26 13:40