网易首页 > 网易号 > 正文 申请入驻

「原创」PHP实战-XML详细教程

0
分享至

XML基础XML概念

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

没有任何行为的 XML

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

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

George

John

Reminder

Don't forget the meeting!

上面的这条便签具有自我描述性。它拥有标题以及留言,同时包含了发送者和接受者的信息,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

Don't forget the meeting!

方法二:使用了date 元素

08/08/2008

George

John

Reminder

Don't forget the meeting!

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

08

08

2008

George

John

Reminder

Don't forget the meeting!

形式良好的 XML 文档

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

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

· XML 文档必须有根元素

· XML 文档必须有关闭标签

· XML 标签对大小写敏感

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

· XML 属性必须加引号

George

John

Reminder

Don't forget the meeting!

查看 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 部分中的所有内容都会被解析器忽略。

CDATA 部分由 "" 开始,由 "" 结束:

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

PHP操作XML——DOMDocument1. 创建和解析XML

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

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


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



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



4) 获取节点值



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



6) 获取节点属性



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


服务器端返回XML1. 后台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表示:


特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
怎么回事?《玫瑰的故事》观众纷纷弃剧,弃剧原因很一致

怎么回事?《玫瑰的故事》观众纷纷弃剧,弃剧原因很一致

评综谈影
2024-06-19 10:12:24
员工懵了!著名快餐连锁店突然关闭15家门店!另外129 家门店也危了

员工懵了!著名快餐连锁店突然关闭15家门店!另外129 家门店也危了

北美省钱快报
2024-06-19 02:56:58
瑞典将军质疑中国大使:你带过多少兵?结果比他们国家军队还多

瑞典将军质疑中国大使:你带过多少兵?结果比他们国家军队还多

百年历史老号
2024-06-18 20:25:42
官方回应理想MEGA坠落:没开辅助驾驶,没系安全带

官方回应理想MEGA坠落:没开辅助驾驶,没系安全带

趣车坊
2024-06-18 15:20:01
22岁卡车司机,带45岁女人跑长途,两人最喜欢经过百里无人区

22岁卡车司机,带45岁女人跑长途,两人最喜欢经过百里无人区

牛城王小帅
2024-06-14 11:45:37
刚离婚,前夫给我一张仅有400元的卡,3年后取钱时我被余额吓到了

刚离婚,前夫给我一张仅有400元的卡,3年后取钱时我被余额吓到了

宅家伍菇凉
2024-06-17 11:32:59
73岁刘晓庆参加法国电影节!化浓妆曝光面容,梳新娘头似20岁

73岁刘晓庆参加法国电影节!化浓妆曝光面容,梳新娘头似20岁

娱圈小愚
2024-06-19 10:29:15
争议哨!裁判吹掉C罗策动绝杀,却吹不掉第2个!拼94分钟带队翻盘

争议哨!裁判吹掉C罗策动绝杀,却吹不掉第2个!拼94分钟带队翻盘

嘴炮体坛
2024-06-19 04:59:48
三过草地的女红军当农民,朱老总怒斥地委领导:你知道她是谁吗?

三过草地的女红军当农民,朱老总怒斥地委领导:你知道她是谁吗?

慧言史说
2024-06-18 11:50:10
发现凶手!中国空间站遭多次撞击,神舟十八携带装甲,目标已锁定

发现凶手!中国空间站遭多次撞击,神舟十八携带装甲,目标已锁定

蜉蝣说
2024-06-18 22:31:22
将近40岁满脸褶,却尬演18岁少女,是谁给了她“强行装嫩”的勇气

将近40岁满脸褶,却尬演18岁少女,是谁给了她“强行装嫩”的勇气

娱乐圈十三太保
2024-05-28 13:56:53
对等反制,中国业界请求提高油车进口税至25%,德意当即宣布访华

对等反制,中国业界请求提高油车进口税至25%,德意当即宣布访华

前沿天地
2024-06-17 17:15:40
刚刚,姜萍被打假了!

刚刚,姜萍被打假了!

财经要参
2024-06-19 08:30:26
随着葡萄牙2-1捷克,欧洲杯首轮全结束,最新积分榜如下:法国第二

随着葡萄牙2-1捷克,欧洲杯首轮全结束,最新积分榜如下:法国第二

邮轮摄影师阿嗵
2024-06-19 12:45:22
林更新杀疯了!网友心疼玫瑰根本不敢骂,林更新:不服来战

林更新杀疯了!网友心疼玫瑰根本不敢骂,林更新:不服来战

子芫伴你成长
2024-06-18 20:23:40
网红rose回应假送金手镯!意外牵扯菲利丝,更多内幕曝光太炸裂

网红rose回应假送金手镯!意外牵扯菲利丝,更多内幕曝光太炸裂

裕丰娱间说
2024-06-18 18:33:05
错了!这样散步,只会加重动脉硬化!

错了!这样散步,只会加重动脉硬化!

华人星光
2024-06-16 09:34:22
开使馆车叫嚣有豁免权的女子道歉!真实身份被扒后,评论区炸裂了

开使馆车叫嚣有豁免权的女子道歉!真实身份被扒后,评论区炸裂了

刚哥说法365
2024-06-19 12:27:31
颁奖晚会上张艺谋走向关晓彤时,关双腿紧闭,张:孩子,你怎么了

颁奖晚会上张艺谋走向关晓彤时,关双腿紧闭,张:孩子,你怎么了

百态人间
2024-06-18 11:32:33
甘肃一女博士刚生完孩子,丈夫就冲进房间将其割喉:大快人心

甘肃一女博士刚生完孩子,丈夫就冲进房间将其割喉:大快人心

青丝人生
2024-05-24 20:04:21
2024-06-19 13:32:49
安然逸博呀
安然逸博呀
生活就是平平淡淡中参杂着小小的风波 我们是来自山东的北漂一家
100文章数 25关注度
往期回顾 全部

科技要闻

英伟达超越苹果、微软登顶全球新股王

头条要闻

为当北约秘书长 荷兰首相吕特跟欧尔班"谈条件"

头条要闻

为当北约秘书长 荷兰首相吕特跟欧尔班"谈条件"

体育要闻

幸运的倒霉蛋!8年前差点退役,现在他帮两支NBA球队夺冠

娱乐要闻

黄一鸣“杀疯了” 直播间卖大葱养孩子

财经要闻

吴清:证监会将推出“科创板八条”

汽车要闻

双肾格栅变化大/内饰焕新 新一代宝马X3官图发布

态度原创

本地
房产
家居
旅游
游戏

本地新闻

我和我的家乡|在鞍山的每一步都有新发现

房产要闻

17.9亿!终于,有民企在三亚大手笔拿地了!周边房价10万+!

家居要闻

自然开放 实现灵动可变空间

旅游要闻

遭遇极端高温天气导致希腊多名游客死亡

100%胜率仍被嘲,LPL“大王”浪出天际;LOL最不肝的通行证上线

无障碍浏览 进入关怀版