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 。