Java学习手册:XML


一、XML语法

XML指可扩展标记语言,是独立于软件和硬件的信息传输工具。

XML用于简化数据共享、数据传输、平台的变更。

XML处理指令,简称PI。处理指令用来指挥解析引擎如何解析XML文档内容。

在XML中,所有的处理指令都以<?开始,?>结束。

XML文档包含XML元素。第一行<?xml version="1.0" encoding="utf-8"?>

XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者亮着的混合物。元素也可以拥有属性。

XML元素可以在开始标签中包含属性,属性提供关于元素的额外(附加)信息,属性通常提供不属于数据组成部分的信息。

XML属性必须加引号,属性值必须被引号包围,不过单引号和双引号均可使用。如果属性值本身包含双引号,那么有必要使用单引号包围它,或者可以使用实体引用。

XML对大小写是敏感的。

XML要求每个元素必须由起始标签和关闭标签组成。

XML要求必须有根元素,所谓根元素就是不被其他任何标签包含。必须有,且有一个。不允许出现与根标签平级的标签。

实体引用字符说明
&lt<小于
&gt>大于
&amp&与字符(和字符)
&apos单引号
&quot"双引号
&nbsp空格

二、XML解析

在这里插入图片描述
注:上图非原创,来源于Carson_Ho博客

(1)SAX解析

工作原理:基于事件驱动,在读取XML文档内容时,事件源顺序地对文档进行扫描,当扫描到文档的开始与结束(Document)标签、节点元素的开始与结束(Element)标签时,直接调用对应的方法,并将状态信息以参数的形式传递到方法中,然后我们可以依据状态信息来执行相关的自定义操作。

解析方式它逐行扫描文档,一边扫描一边解析。而且与DOM相比,SAX可以在解析文档的任意时刻停止解析。

优点解析效率高、占内存存少、灵活性高,解析可以立即开始,速度快,没有内存压力。适合在Android等移动设备使用。

缺点解析方法复杂(API接口复杂),代码量大;可拓展性差:无法对 XML 树内容结构进行任何修改;不能对结点做修改。很难同时访问同一文档中的不同部分数据,不支持XPath

(2)DOM解析

工作原理DOM是基于树形结构的的节点的文档驱动方法,通常需要加载整个文档并构成DOM树之后才开始工作。使用DOM对XML文件进行操作时,首先解析器读入整个XML文档到内存中,然后解析全部文件,并将文件分为独立的元素、属性等,以树结构的形式在内存中对XML文件进行表示,开发人员通过使用DOM API遍历XML树,根据需要修改文档或检索所需数据

解析方式:把文档中的所有元素按照其出现的层次关系,解析成一个Node(节点)对象。

优点:整个文档树存在内存中,可对XML文档进行操作:遍历、删除、修改等等;可多次访问已解析的文档;由于在内存中以树形结构存放,因此检索和更新效率会更高。(简单、直观,适用于XML文件较小时

缺点:解析 XML 文件时会将整个 XML 文件的内容解析成树型结构存放在内存中并创建新对象,比较消耗时间和内存。(需要加载整个文档来构造层次结构,资源消耗大,该方式不适合解析大文档
解析步骤
①调用 DocumentBuilderFactory.newInstance() 方法得到 DOM 解析器工厂类实例。
②调用解析器工厂实例类的 newDocumentBuilder() 方法得到 DOM 解析器对象。
③调用 DOM 解析器对象的 parse() 方法解析 XML 文档得到代表整个文档的 Document 对象。

(3)PULL解析

工作原理:PULL的解析方式与SAX解析类似,都是基于事件的模式
PULL提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从XML文档中提取所有字符数据,与SAX不同的是,PULL并未像SAX那样监听元素的结束,而是在开始处完成了大部分处理。在PULL解析过程中,触发相应的事件调用方法返回的是数字,且我们需要自己获取产生的事件,然后做相应的操作,而不像SAX那样由处理器触发一种事件,从而执行相应的代码。当解释到一个文档结束时,自动生成EndDocument事件。Android官方推荐开发者使用Pull解析技术。

优点SAX的优点PULL都有,而且解析方法比SAX更加简单,非常适合在Android移动设备中使用。

缺点:可拓展性差:无法对 XML 树内容结构进行任何修改

:同样的使用情景,在SAX和PULL解析方法中,更加推荐PULL方法


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值