php middot还原,「原创」PHP实战-XML详细教程-教程

本文探讨了XML和JSON在数据存储、传输和结构化方面的基本概念和用途。XML用于结构化信息,强调数据的描述性和移植性,但解析和编码相对复杂。JSON则更简洁,易于阅读,特别适合JavaScript环境,适用于轻量级数据交换。两者各有优缺点,XML扩展性强,JSON在某些场景下效率更高。
摘要由CSDN通过智能技术生成

66a802ad7381149590fa96051450c672.png

XML基础

XML概念

XML (EXtensible Markup Language)指可扩展标记语言 ,XML 被设计用来传输和存储数据 。

没有任何行为的 XML

也许这有点难以理解 ,但是 XML 不会做任何事情 。XML 被设计用来结构化、存储以及传输信息 。

下面是 John 写给 George 的便签 ,存储为 XML:

George

John

Reminder

上面的这条便签具有自我描述性 。它拥有标题以及留言 ,同时包含了发送者和接受者的信息 ,XML 标签没有被预定义 ,需要自行定义标签 。

这个 XML 文档仍然没有做任何事情 。它仅仅是包装在 XML 标签中的纯粹的信息 。我们需要编写软件或者程序 ,才能传送、接收和显示出这个文档 。

用途(作用)

XML 应用于 web 开发的许多方面 ,常用于简化数据的存储和共享 。

· XML 把数据从 HTML 分离

· XML 简化数据共享

· 简化数据传输

· 简化平台的变更

· 使您的数据更有用

语法(规则)

所有 XML 元素都须有关闭标签

标签对大小写敏感

XML 标签对大小写敏感 。在 XML 中 ,标签 与标签 是不同的 。

必须使用相同的大小写来编写打开标签和关闭标签:

这是错误的 。

这是正确的 。

XML 必须正确地嵌套

在 HTML 中 ,常会看到没有正确嵌套的元素 ,下述语句是错误的 。

This text is bold and italic

在 XML 中 ,所有元素都必须彼此正确地嵌套:

This text is bold and italic

XML 文档必须有根元素

XML 文档必须有一个元素是所有其他元素的父元素 。该元素称为根元素 。

.....

XML 的属性值须加引号

与 HTML 类似 ,XML 也可拥有属性(名称/值的对) 。

在 XML 中 ,XML 的属性值须加引号 。请研究下面的两个 XML 文档 。第一个是错误的 ,第二个是正确的:

George

John

George

John

在第一个文档中的错误是 ,note 元素中的 date 属性没有加引号 。

XML 中的注释

在 XML 中编写注释的语法与 HTML 的语法很相似:

XML树结构

XML 文档形成一种树结构

XML 文档必须包含根元素 。该元素是所有其他元素的父元素 。

XML 文档中的元素形成了一棵文档树 。这棵树从根部开始 ,并扩展到树的最底端 。

所有元素均可拥有子元素 。

上图表示下面的 XML 中的一本书:

例子中的根元素是 。

文档中的所有 元素都被包含在 中 。

元素有 4 个子元素:、< author>、、 。

XML元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分 。

元素可包含其他元素、文本或者两者的混合物 。元素也可以拥有属性 。

在上例中 , 和 都拥有元素内容 ,因为它们包含了其他元素 。 只有文本内容 ,因为它仅包含文本 。

在上例中 ,只有 元素拥有属性 (category="CHILDREN") 。

XML 属性

属性通常提供不属于数据组成部分的信息 。在下面的例子中 ,文件类型与数据无关 ,但是对需要处理这个元素的软件来说却很重要:

computer.gif

元素与属性的选择和应用

下面的三个 XML 文档包含完全相同的信息:

方法一:使用 date 属性

George

John

Reminder

方法二:使用了date 元素

08/08/2008

George

John

Reminder

方法三:使用扩展的 date 元素

08

08

2008

George

John

Reminder

形式良好的 XML 文档

"形式良好"或"结构良好"的 XML 文档拥有正确的语法 。

"形式良好"(Well Formed)的 XML 文档会遵守前几章介绍过的 XML 语法规则:

· XML 文档必须有根元素

· XML 文档必须有关闭标签

· XML 标签对大小写敏感

· XML 元素必须被正确的嵌套

· XML 属性必须加引号

George

John

Reminder

查看 XML 文件

通过右击浏览器 ,查看页面源代码的方式 ,查看XML文件 。

XML实例

1. 用XML表示中国部分省市数据

源码:

中国

黑龙江

哈尔滨

大庆

广东

广州

深圳

珠海

台湾

台北

高雄

新疆

乌鲁木齐

XML高级

所有 XML 文档中的文本均会被解析器解析 。

只有 CDATA 区段(CDATA section)中的文本会被解析器忽略 。

1. PCDATA

PCDATA 指的是被解析的字符数据(Parsed Character Data) 。

XML 解析器通常会解析 XML 文档中所有的文本 。

当某个 XML 元素被解析时 ,其标签之间的文本也会被解析:

此文本也会被解析

解析器之所以这么做是因为 XML 元素可包含其他元素 ,就像这个例子中 ,其中的 元素包含着另外的两个元素(first 和 last):

BillGates

而解析器会把它分解为像这样的子元素:

Bill

Gates

CDATA

术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data) 。

在 XML 元素中 ,"

"

"&" 也会产生错误 ,因为解析器会把该字符解释为字符实体的开始 。

某些文本 ,比如 JavaScript 代码 ,包含大量 "

CDATA 部分中的所有内容都会被解析器忽略 。

CDATA 部分由 "" 结束:

function matchwo(a,b)

{

if (a < b && a < 0) then

{

return 1;

}

else

{

return 0;

}

}

]]>

在上面的例子中 ,解析器会忽略 CDATA 部分中的所有内容 。

PHP操作XML——DOMDocument

1. 创建和解析XML

DOMDocument还是PHP5后推出的DOM扩展的一部分 ,可用来建立或解析html/xml ,目前只支持utf-8编码 。

1) 创建DOMDocument对象 ,加载xml文件(load)

2) 获取节点 ,返回DomNodeList对象

3) 根据索引获取节点元素 ,返回DomElement对象

4) 获取节点值

5) 遍历节点集合(DOMNodeList对象) ,获取节点值XML文档的解析

6) 获取节点属性

使用loadXML方法加载含有xml数据的字符串

服务器端返回XML

1. 后台PHP程序 ,响应前端ajax请求 ,返回xml格式数据 。

前端程序 ,发送ajax请求 ,获取数据 ,输出节点值

· 客户端接收到的数据是XMLDocument对象 。

· 节点值

PHP操作XML——simpleXML

SimpleXML是PHP5后提供的一套简单易用的xml工具集 ,可以把xml转换成方便处理的对象 ,也可以组织生成xml数据 。

1. 通过字符串构建XML对象

案例

从数据库中读取数据 ,在PHP中使用simpleXML构建XML格式数据 ,生成XML文件 。

生成的messages.xml文件内容

查看源代码

json与xml区别

1. 可读性

JSON和的可读性可谓不相上下 ,一边是简易的语法 ,一边是规范的标签形式 ,很难分出胜负 。

可扩展性

XML天生有很好的扩展性 ,JSON当然也有 ,没有什么是XML可以扩展而JSON却不能扩展的 。不过JSON在Javascript主场作战 ,可以存储Javascript复合对象 ,有着xml不可比拟的优势 。

编码难度

XML有丰富的 ,比如Dom4j、JDom等 ,JSON也有提供的工具 。无工具的情况下 ,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON串 ,不过 ,xml文档要多很多结构上的字符 。

解码难度

的解析方式有两种:

一是通过文档模型解析 ,也就是通过父标签索引出一组标记 。例如:xmlData.getElementsByTagName("tagName") ,但是这样是要在预先知道文档结构的情况下使用 ,无法进行通用的封装 。

另外一种方法是遍历节点(document 以及 childNodes) 。这个可以通过来实现 ,不过解析出来的数据仍旧是形式各异 ,往往也不能满足预先的要求 。

凡是这样可扩展的结构数据解析起来一定都很困难 。

JSON也同样如此 。如果预先知道JSON结构的情况下 ,使用JSON进行数据传递简直是太美妙了 ,可以写出很实用美观可读性强的代码 。如果你是纯粹的前台开发人员 ,一定会非常喜欢JSON 。但是如果你是一个应用开发人员 ,就不是那么喜欢了 ,毕竟xml才是真正的结构化 ,用于进行数据传递 。

而如果不知道JSON的结构而去解析JSON的话 ,那简直是噩梦 。费时费力不说 ,代码也会变得冗余拖沓 ,得到的结果也不尽人意 。但是这样也不影响众多前台开发人员选择JSON 。因为json.js中的toJSONString()就可以看到JSON的字符串结构 。当然不是使用这个字符串 ,这样仍旧是噩梦 。常用JSON的人看到这个字符串之后 ,就对JSON的结构很明了了 ,就更容易的操作JSON 。

以上是在Javascript中仅对于数据传递的xml与JSON的解析 。在Javascript地盘内 ,JSON毕竟是主场作战 ,其优势当然要远远优越于xml 。如果JSON中存储Javascript复合对象 ,而且不知道其结构的话 ,我相信很多程序员也一样是哭着解析JSON的 。

除了上述之外 ,JSON和XML还有另外一个很大的区别在于有效数据率 。JSON作为数据包格式传输的时候具有更高的效率 ,这是因为JSON不像XML那样需要有严格的闭合标签 ,这就让有效数据量与总数据包比大大提升 ,从而减少同等数据流量的情况下 ,网络的传输压力[2] 。

实例比较

XML和JSON都使用结构化方法来标记数据 。

用XML表示中国部分省市数据如下:

用JSON表示:

本文仅代表作者个人观点 ,不代表必飞SEO官方发声 ,对观点有疑义请先联系作者本人进行修改 ,若内容非法请联系平台管理员 。更多相关资讯 ,请到必飞SEOwww.brandfly.cn学习互联网营销技术请到巨推学院www.jutuiedu.com 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值