XML基础
XML概念
XML (EXtensible Markup Language)指可扩展标记语言,XML 被设计用来传输和存储数据。
没有任何行为的 XML
也许这有点难以理解,但是 XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。
下面是 John 写给 George 的便签,存储为 XML:
上面的这条便签具有自我描述性。它拥有标题以及留言,同时包含了发送者和接受者的信息,XML 标签没有被预定义,需要自行定义标签。
这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
用途(作用)
XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。
· XML 把数据从 HTML 分离
· XML 简化数据共享
· 简化数据传输
· 简化平台的变更
· 使您的数据更有用
语法(规则)
所有 XML 元素都须有关闭标签
标签对大小写敏感
XML 标签对大小写敏感。在 XML 中,标签
必须使用相同的大小写来编写打开标签和关闭标签:
< message >这是错误的。
XML 必须正确地嵌套
在 HTML 中,常会看到没有正确嵌套的元素,下述语句是错误的。
This text is bold and italic
在 XML 中,所有元素都必须彼此正确地嵌套:
This text is bold and italic
XML 文档必须有根元素
XML 文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。
XML 的属性值须加引号
与 HTML 类似,XML 也可拥有属性(名称/值的对)。
在 XML 中,XML 的属性值须加引号。请研究下面的两个 XML 文档。第一个是错误的,第二个是正确的:
在第一个文档中的错误是,note 元素中的 date 属性没有加引号。
XML 中的注释
在 XML 中编写注释的语法与 HTML 的语法很相似:
XML树结构
XML 文档形成一种树结构
XML 文档必须包含根元素。该元素是所有其他元素的父元素。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有元素均可拥有子元素。
上图表示下面的 XML 中的一本书:
例子中的根元素是
文档中的所有
XML元素
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
在上例中,
在上例中,只有
XML 属性
属性通常提供不属于数据组成部分的信息。在下面的例子中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:
元素与属性的选择和应用
下面的三个 XML 文档包含完全相同的信息:
方法一:使用 date 属性
方法二:使用了date 元素
方法三:使用扩展的 date 元素
形式良好的 XML 文档
“形式良好”或”结构良好”的 XML 文档拥有正确的语法。
“形式良好”(Well Formed)的 XML 文档会遵守前几章介绍过的 XML 语法规则:
· XML 文档必须有根元素
· XML 文档必须有关闭标签
· XML 标签对大小写敏感
· XML 元素必须被正确的嵌套
· XML 属性必须加引号
查看 XML 文件
通过右击浏览器,查看页面源代码的方式,查看XML文件。
XML实例
1. 用XML表示中国部分省市数据
源码:
XML高级
所有 XML 文档中的文本均会被解析器解析。
只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。
1. PCDATA
PCDATA 指的是被解析的字符数据(Parsed Character Data)。
XML 解析器通常会解析 XML 文档中所有的文本。
当某个 XML 元素被解析时,其标签之间的文本也会被解析:
解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个例子中,其中的
而解析器会把它分解为像这样的子元素:
CDATA
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,”<” 和 “&” 是非法的。
“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。
“&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 “” 结束:
在上面的例子中,解析器会忽略 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表示:
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~