XML文档快速解析技术研究
xml文件解析

10
Jdom
JDOM 使用标准的 Java 编码模式,用以来弥补DOM及SAX在实际 应用当中的不足之处。 这些不足之处主要在于SAX没有文档修改、随机访问以及输出的 功能,而对于DOM来说,在使用时来用起来不太方便。 在 JDOM 中,XML 元素就是 Element 的实例,XML 属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。 因为 JDOM 对象就是像 Document、Element 和 Attribute 这些类 的直接实例,因此创建一个新 JDOM 对象就如在 Java 语言中使 用 new 操作符一样容易。而不使用复杂的工厂化模式,使对象操 作更为方便。
5
得到文档模型的根元素 Element root = doc.getDocumentElement(); 元素Element的函数: String getTagName() -得到标签的名字 String getAttribute(“unit”) -得到元素的unit属性值 节点Node的函数: NodeList getChildNodes() - 得到子节点的集合 Node getFirstChild() - 得到第一个子节点 Node getLastChild() - 得到最后一个子节点
16
1. 读取并解析XML文档:
读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和 SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好 处。
// 从文件读取XML,输入文件名,返回XML文档 public Document read(String fileName) throws MalformedURLException, DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read(new File(fileName)); return document; } 2. 取得Root节点 public Element getRootElement(Document doc){ return doc.getRo树
XML文档快速解析技术研究

1 X ML解 析 的必 要 性
X ML解 析器 是 X ML应用 的基 础。X ML本身 只 是以纯 文 本对 数 据 进行 编 码 的一 种 格 式 , 想 利 用 要 X ML, 或者说利用 X ML文件中所编码 的数据 , 须先 必
S ML Sadr ee le ru ag ae标 准 通 G ( t adG nr i dMa pLn ug , n az k
存储结构都带来 了很大的负载压力 , 这就 导致 了 X ML
的两个关键问题 : 长和性能 。
1冗长 : X ) 以 ML格 式储存 的数 据要 比以其他 数 据库格式储存 占有的空 间要大得 多。
2 性能 : ) 由于 X ML固有的冗余 特性 , X 对 ML数 据 的管理将增大应用服务器的负担。
用标记语言) 的子集 , 它保 留了 S ML主 要使用 功 能 G 的同时大大缩 减 了 S GML的复 杂性 。它 独立 于任何 语 言和体系结构 , 是公认 的下一代 网络标记语言。
Ab t a t I to u e h h o yo a tp r igo XM L d c me t n sr c : n r d c d t et e r ff s a s n f o u n ,a d y e h d a t g sa d d s d a tg o wo p r igm e h d z dt ea v n a e n ia v a e ft a sn n s to s
陈 娟 ,李 晖 , 鱼 雷
XML文档解析技术研究

用。 …无论是异构数据库信息的交换还是高效检 索 网页 中的 X ML数 据 , 都 需要 将 X ML数据 包含 的 内容 解 析 出来 , 从 而 得 到有 效 信 息节 点 。对 于 较小 的 XML数 据 流 , 可 以解 析 后 直 接 在 内存 中 进行处 理 , 然 后 在 缓 冲 区 中接 收 下 一 X ML数 据
具有很 好 的 自我 描 述 能 力 。X ML 以结 构 化 的方
流 。然而 , 当需要 处理 以 G B为 单 位 的大 量 X ML
信息 时 , 流处 理 和 内存缓 冲 区显 得 力 不从 心 。研
式描述 各种 类 型 的数 据 , 几 乎 可 以描 述 所 有领 域 的数据 。XML用严 格 的嵌 套标记 表 示数 据信 息 , 特别适 合 在 国际互联 网 的多点数据 交换 环境 下使
( 1 . De p a r t me n t o f C o mp u t e r S c i e n c e a n d T e c h n o l o g y , B e n g b u Co l l e g e , B e n g b u 2 3 3 0 0 0 ;
中图分类 号 : T P 3 1 1
Re s e a r c h o n t h e XM L Do c u me n t Pa r s i n g Te c h n o l o g y
XML安全快速解析技术研究.doc

XML安全快速解析技术研究
本论文主要对可扩展标记语言(XML)的新的解析技术——基于虚拟令牌描述符(VTD)解析技术进行了研究。
文中首先对XML产生背景和未来的发展趋势进行了介绍,分析了XML文档数据解析的必要性以及快速解析理论。
在第二章中具体讲解了在XML文档中的语法和相应的格式和标准。
第三章中详细介绍了现行的XML解析方式DOM和SAX,并对两种方式进行了性能的比较。
在分析了现有解析方式优劣的基础上,第四章重点讨论了基于虚拟令牌环的VTD-XML解析技术,这种方式能在性能和速度上大大提高XML的解析能力,它不仅解决了SAX和DOM的各种问题,还带来了非提取性能的其它好处;本文还提出了一种扩展VTD-XML解析方式。
第五章中首先介绍了XML文档的加密和数字签名技术,之后提出了VTD-XML的安全传输方案。
XML技术研究

一
一
一
6O 一
关键词: XMLHT ; 记 语 言 ; ML标
的解释。浏览器中预定义 了特定标记的特定显 对给定的 X L M 文档进行变换之后生成的。 现在 示 或逻辑方 案 ; T L的主要功能 在于通过浏 我们要将 网站的内容放在一本书中,只需要重 HM 览器完成对信息的显示 , 即信息 的格式化控制。 新定义 X L , ST 给出变化规则 , 可以将 内容完 就 X ML是 S ML是文档的精简版本 。S ML过 于 美的再现在另外 的一种形式中了。 G G 复杂 ,学习难度和开发难度都很大 ;M X L的主 6 M 用于通信。 M 的应用在于于计 .x L 2 X L 算机之间的数据交换。当—个系统可能有几台 相反 , 几乎所 有 的 n 部门 , 被巨大 、 ’ 都 错综复 要特点如下 : 杂、 新旧交替的系统所 累, 而且受到资源的极大 41不同系统平台的信息互通。 . 服务器 ,同时使用不同的操作 系统和数据库的 时候 ,不同系统之间的数据交换将变成一个十 制约。 4 . 2整合多种不同数据源的数据 。 由于世界上存在着如此多 的、 完全不 同的 M 我 43平衡 客户端和服务器端的处理负荷 。 分令人头疼的事情。当采用 X L规范以后 , _ 客户平台 , 在不同平台问交换数据 , 同时还要保 44以灵活多变的方式显示数据。 . 们只需要接收 X L M 标记 的数据 ,遵循在 I D Y r 45更精确的数据检索。 . 中定义的规范 ,而不需要知道对方 的系统是什 证数据的完整和服务的高效 ,这是 件令人头痛 的事情 。在大型 We b应用中, 工程师们往往被 5有了 H ML 为什么还需要用 X ? T , ML 么。 因为 X L M 数据不与任何类型的客户方栓在 数据格式的转换弄得疲惫不堪 ,即便是整理完 S ML的一个重要的派生 ,就是超文本标 起 。 以它提供 了一种很容易在 网络上传输 G 所 成 的数据 , 如何让各种客户端都能正确获取和 记语言 H ML T 。几乎所有的用户都熟悉 H ML 的非常简单的数据表示方式。 T , 理解也是不小的麻烦。 最终 , 这一问题成为制约 人们感谢 H ML 正是 由于 IF T , T ML标 准的出现 , 6 M 用于配置 。作为应用程序服务器 .X L 3 增加了技术的可移植性 。 实际 we e i 发展的瓶 颈。近年来 , b Sr c ve 随着企业运 才使 It t ne 走出了实验室 , me 成为人人皆可使用 的配置说明文档 , 营 国际化的趋势越来越明显,垮平台垮语言 的 的工具, 也成为影 响世界最重要的技术 , 它不但 上,从 s M 派生出 X L G L M 子集的主要原因是 , 远程调用成为一种迫切需要的能力 ,人们需要 改变了人们的生活 , 也改变 了世界运转的方式 , 编写处理 S M G L文档的应用程序太笨拙 了。如 种平台无关的、能够同时被人类和机器所理 同时 , 更为软件的开发形式带来 了多元化的形 果希望 X L M 有实用性 , 那么它就必须很容易编 解 和处 理 的 文本 数 据 格 式 。 而这 种 技 术 的核 心 , 式 。 写文档处理程序、 文档浏览器和其它程序 , 只有 就是 X 。 ML 因为现在网络 应用越来越 广泛 ,仅仅靠 这样 , 使用 X L的代价才不会太大 。 M 2X ML概 述 HM T L单一文件类型来处理干变万化的文档和 7使用 X L M 的好处 X ML是 E t s l Mak p L n u g xe i e n b ru a g a e的 缩 数据 已经力不丛心 , 而且 H ML本身语法十分 T 71X 可 以广泛地运用 于 W b . ML e 的任何 写, 中文含义为“ 可扩展标 记语 言” M 。X L首先 不严密 , 严重影响网络信 息传送和共享。 人们早 地方。 是一种标记语言而且是用来创造标 记语言 ( 已经开始探讨用什么方法来满足网络上各种应 比 7 M 可以满足网络应用的需求 。 .X L 2 如 HM ) T L的元语 言 ; 其次 , 它是一种 可扩展 的 用 的 需 要 。 7 . 3使用 X L M 将使编程更加简单 。 标记语言 , 因为在 X 中允许用户 自己来创建 ML 74XML便于学习和创建 。 . 使用 S M 是可以的, S M 太庞大 , G L 但 G L 编 标签 , 所以叫做可扩展性 。 程复杂 ,于是最终选择 了 “ 减肥”的 S ML— G 7 ML . X 代码将清晰和便于阅读理解。 5 标 记语言是 指在 普通文本 中加 入一些具 X ML作为下一代 We b运用的数据传输 和交互 8结 论 有特定含义的标记 ,以对文本的内容进行标识 的工具 。和 H ML一样 ,ML 是依据 S ML标 T X G 新旧技术的集成是当今商业面对的一个巨 和说明的一种文件表示方法 。标记语言对文档 准演 化 而 来 的 。W3 此 建 立 了 X C为 ML工 作 组 大的挑战 , 在许多企业环境 中, 每一种平台都有 的意义进行了分析和细化 ,使得计算机应用软 ( xwG) 开 始 创建 XM 来 L的进 程 。X ML将 派 生 它工作的最佳范围,一个平台不可能 良好 的完 件对文本的意义也就有了一定程度 的理解。 于 S L,但与 S ML相 比, L将大 幅度简 成包 罗万象的任务 , GM G XM 基础结构是在发展中逐渐 3XML的标记特性 化, 原则上它只使用 2 % G L 0 S M 标准 , 但需要发 充实 完善 的,因此 ,M X L技术的研究还有更大 3 . 1作为一种标记语言 , 它最基本的功能 挥 了 8 %的效力 。同时与 H ML相比 , 0 T 它需要 的发 展 空 问 。 就是在文档中添加标记, 而且, 标记的添加必须 更加严谨 ,而且更适合于计算机之间的数据交 参 考文 献 遵循一定的规则。最为直观的规则就是标记必 换 。 『 1 1周爱武, 李孙长, 程博等. M 数据库的研究 X L 须成对出现 。 6X ML的应 用 与应 用 【1 J .计算机 技 术与 发展 ,0 9 1 () 2 0 ,99 : 2 4. 8 3 . 2所使用的标记都是非预定 义的,即用 61X . ML用于表示 内容。内容与表现形式 21 - 2 户 自己定义的。只要遵守 X ML的标 记命名规 的分离 , 一个 X ML文档中几乎所有的内容都是 『1苗 维 杰, .基 于 X 2 天辉 ML代 码 生成 技 术 的应 则, 可以在文档中添加任何标记。 数据和数据结构 , 它主要用于传递数据, 对数据 用研 究 . 元 器件 应 用 ,0 9 l(o:5 8 . 电子 2 0 ,11)7 — 2 3 . 3用户 自 定义的标记 , 户可在文档内, 的表 现 完全 被 剥 离 。 用 f】陈腾 . 3 基于 XML数据发布的设计和 实现m. 也可以在文档之外进行说明。 标记的说明称为: 现在的大部分 网站都是用 H M T L编写的。 地 理 空间 信 息 ,09 75:7 9 . 2 0 ,()8 — 1 DT D。 网页设计师们精心设计的网页 , 能够在 We b浏 f1 治俊, 4 邢 王凌飞, 谢声时等. 浅谈 X ML解析 3 M 文档的标记只描述文 档的内容, 览器上很漂亮的显示出来 ,但是如果想把这些 技 术 明. 南金 融 电脑 ,0 9 1fo: 15 . .X L 4 华 2 0 ,】】 ) - 2 5 具体说 , 只描述文档的结构和意义 。 不描述其任 网页所 包含的内容重新设计在一本书 中的话 , 作 者 简 介 : 宁 (9 5 ) 女 , 师 , 士 , 任 17 一 , 讲 硕 研 何显示 、 出等格式化信息。 输 显然 , 浏览器上 的漂亮 内容就不能很方便 的在 究方 向 为软 件 工程 和 网络技 术 。 4XML和 H ML的 比较 T 书中体 现出来 了。但是 ,ML的出现为解决这 X H ML通过在 文档 中添加具 有特定 意义 种问题提供了一种 良好 的解决方案 。 T 的标记来组织 文档 ; T L所使用 的标 记都 是 HM 因为 XM L只是定义数据 , 它并不关心数据 预定义 ( 固有的标 记) 不同的 H M 版本具 是如何显示 的, 的, T L 所以用 X MI设计出的网站其 内 有不同的标 记集合 ; 浏览器完成对 H M 文 档 容和显示是分离的。一般的网页是通过 X L TL ST
xml 格式 解析

xml 格式解析XML格式解析是一种常见的数据解析方法,它可以将XML格式的数据转换为可供程序使用的数据结构。
XML即可扩展标记语言(eXtensible Markup Language),它被广泛应用于数据交换和存储。
下面将介绍XML格式解析的原理和常用的解析方法。
XML格式解析的原理是通过读取XML文件并识别其中的标签、属性和文本内容,将其转换为内存中的数据结构,以便程序进行进一步处理。
XML文件由起始标签、结束标签、属性和文本内容组成。
解析器会根据这些组成部分对XML文档进行解析。
常用的XML格式解析方法有两种:DOM解析和SAX解析。
DOM(文档对象模型)解析是一种将整个XML文档加载到内存中,并构建一个XML树结构的解析方法。
它可以方便地对XML文档进行增删改查操作。
DOM解析器会先将整个XML文档加载到内存中,然后构建一个树状结构,通过遍历树状结构来访问和操作XML文档的节点。
SAX(简单 API for XML)解析是一种基于事件驱动的解析方法。
它边读取XML文档边解析,并在读取到XML文档的不同部分时触发相应的事件。
相比DOM解析,SAX解析更加高效,特别适用于大型XML文件的解析。
SAX解析器会逐行读取XML文档,当遇到起始标签、结束标签或文本内容时触发相应的事件,并通过事件处理程序来处理这些事件。
选择使用DOM解析还是SAX解析取决于具体的需求。
如果需要对XML文档进行多次操作或查询,DOM解析更方便。
但是,如果处理大型XML文件或只需一次性读取XML数据,SAX解析更高效。
总之,XML格式解析是处理XML数据的重要技术。
通过DOM解析和SAX 解析,我们可以将XML格式的数据转换为程序可以处理的数据结构,实现数据的读取、分析和操作。
XML解析的四种方法建议使用demo4j解析测试可以用

XML解析的四种⽅法建议使⽤demo4j解析测试可以⽤4、DOM4J解析 特征: 1、JDOM的⼀种智能分⽀,它合并了许多超出基本XML⽂档表⽰的功能。
2、它使⽤接⼝和抽象基本类⽅法。
3、具有性能优异、灵活性好、功能强⼤和极端易⽤的特点。
4、是⼀个开放源码的⽂件 以下是解析代码:public class DOM4JTest {private static ArrayList<Book> bookList = new ArrayList<Book>();/*** @param args*/public static void main(String[] args) {// 解析books.xml⽂件// 创建SAXReader的对象readerSAXReader reader = new SAXReader();try {// 通过reader对象的read⽅法加载books.xml⽂件,获取docuemnt对象。
Document document = reader.read(new File("src/res/books.xml"));// 通过document对象获取根节点bookstoreElement bookStore = document.getRootElement();// 通过element对象的elementIterator⽅法获取迭代器Iterator it = bookStore.elementIterator();// 遍历迭代器,获取根节点中的信息(书籍)while (it.hasNext()) {System.out.println("=====开始遍历某⼀本书=====");Element book = (Element) it.next();// 获取book的属性名以及属性值List<Attribute> bookAttrs = book.attributes();for (Attribute attr : bookAttrs) {System.out.println("属性名:" + attr.getName() + "--属性值:"+ attr.getValue());}Iterator itt = book.elementIterator();while (itt.hasNext()) {Element bookChild = (Element) itt.next();System.out.println("节点名:" + bookChild.getName() + "--节点值:" + bookChild.getStringValue());}System.out.println("=====结束遍历某⼀本书=====");}} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}。
XML应用的关键:XML解析技术

中图分类号:P 1 文献标识码: T 32 A
文章编号:0 93 4 (070 - 0 8 - 3 10 - 0 42 0)2 1 17 0
Th e fXML e K y o Ap l ain : LPa s r pi t sXM re c o
L uXU h n -u ,UO ag I Ch , E S eg jnL Qi n
Ab t c: i h n raig p p lr fXM L d c me ta pia o sh asrtc n lge e a etek y o L a p c t n . i s r t t teices o uai o a W h n y t o u n p l t n, ep re eh oo isb cm h e fXM p h a o s ci t i Ths
用 系 统 的 性 能 有 很 大 的影 响 , 果 选 择 不 慎将 导 致 过 度 的 内存 消 如
耗和较 长的处理时间 . 从而大大降低 了系统的整体性能。
所 谓 X L文 档 的解 析 就 是 把 代 表 X M ML文 档 的 一 个 无 结 构
的 字 符 序 列 转换 为 满 足 XML语 法 的 结 构 化 组 件 的过 程 [】 目前 1。
维普资讯
本 目 任 辑: 媛 栏 责 编 谢 嫒
。 . . 开 发研 究 与设 计技 术 . 。..
X L M 应用的关键 : M 解析技术 X L
黎楚 , 胜军 。 薛 罗强
( 武汉理工大学 计算机科 学与技 术学院, 湖北 武汉 4 0 7 ) 3 0 0
ppr nl e erazt npoe fo r a e aa zdt l ao rc ̄o u v h ei i f XML pr r eh o ge d ul n e cn l e weec mprd h nsmeavcs r a e cn li s e idadt s t h oo s r o ae . e s t o e h ee i g T o d i e e we g e nmaig h gt h i r o r eurmet i no kn e h oc f u q i n . v t r c eo y r e s i
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期:2006-12-27作者简介:陈 娟(1982-),女,陕西人,硕士研究生,研究方向为密码学;李 晖,教授,研究方向为网络安全。
X ML 文档快速解析技术研究陈 娟,李 晖,鱼 雷(西安电子科技大学计算机网络与信息安全教育部重点实验室,陕西西安710071)摘 要:介绍了XML 文档数据的快速解析理论及其解析的必要性,并在分析现有解析方式的优劣的基础上,着重研究了新的V TD 格式的解析技术。
这种方式能在性能和速度上大大提高XML 的解析能力,它不仅解决了SAX 和DOM 的各种问题,还带来了非提取性能的其它好处,比如快速的解析与遍历、XPath 的支持、增量更新(Incremental U pdate )等等。
关键词:XML ;V TD ;解析;非提取中图分类号:TP312 文献标识码:A 文章编号:1673-629X (2007)10-0040-03Study of T echnology for Parsing XML DocumentCHEN J uan ,L I Hui ,YU Lei(Ministry of Edu.K ey Lab.of Computer Networks and Information Security ,Xidian Univ.,Xi ’an 710071,China )Abstract :Introduced the theory of fast parsing of XML document ,and analyzed the advantages and disadvantages of two parsing methods available.On the basic of that ,focused on a new parsing method -V TD.This method increases the speed and improves the performance of XML parsing.V TD doesn ’t only resolve several problems brought by SAX or DOM ,but also contains other benefits of non -extrac 2tive ,such as fast parsing and traversal ,the support of XPath ,incremental update.etc.K ey w ords :XML ;V TD ;parsing ;non -extractive0 引 言XML (eXtensible Markup Language )———可扩展标记性语言,是W3C 组织认可的文档数据格式标准,是SGML (Standard G eneralized Markup Language ,标准通用标记语言)的子集,它保留了SGML 主要使用功能的同时大大缩减了SGML 的复杂性。
它独立于任何语言和体系结构,是公认的下一代网络标记语言。
由于XML 文档能应用在不同平台上,实现数据的协同工作,它现在已成为不可缺少的企业技术的一部分。
比如,XML 增加了在商场中的电子商务和交流沟通,以及公司内部多样数据的综合。
XML 的使用因此而快速增长,分析家Ron Schmelzer 预测,到2006年,XML 将由2003年网络流量的3%上涨至24%,并且到2008年将至少上涨至40%[1]。
然而,对不断增长的XML 文档的执行引起了一个关键的问题:由于文档中每个元素都包含了相当大的元数据,所以XML 文档就包含了大量的数据。
这便造成了程序处理的低效,并且给公司网络、处理器和存储结构都带来了很大的负载压力,这就导致了XML 的两个关键问题:冗长和性能。
1)冗长:以XML 格式储存的数据要比以其他数据库格式储存占有的空间要大得多。
2)性能:由于XML 固有的冗余特性,对XML 数据的管理将增大应用服务器的负担。
1 XML 解析的必要性XML 解析器是XML 应用的基础。
XML 本身只是以纯文本对数据进行编码的一种格式,要想利用XML ,或者说利用XML 文件中所编码的数据,必须先将数据从纯文本中解析出来,因此,要求必须有一个能够识别XML 文档信息的文本文件阅读器(即XML 解析器),用来解析XML 文档并提取其中的内容。
显然,XML 解析器在XML 应用程序中有着重要的地位。
XML 解析器根据是否验证合法性,可分为验证性和非验证性解析器;而根据解析方式的不同,又可分为DOM 解析器和SAX 解析器等[2]。
2 XML 解析器的工作原理①负载均衡器接收来自Internet 的入站XML 流量。
第17卷 第10期2007年10月 计算机技术与发展COMPU TER TECHNOLO GY AND DEV ELOPMEN T Vol.17 No.10Oct. 2007②负载均衡器直接将XML 流量定向到XML 解析器。
③XML 解析器解压缩、解析、解释和确认XML 流量,然后将它路由给适当的应用服务器。
④XML 解析器对应从应用服务器接收到的XML 流量进行转换、确认、加密和压缩。
⑤XML 解析器将对XML 数据送给负载均衡器,随后这些数据被送上Internet 。
如图1所示,XML 解析器把原来由应用服务器承担的许多大量耗费CPU 时间的任务卸载到网络上,这使得企业获得线速性能的花费大大降低了。
与通过扩展应用服务器来获得相同性能相比,利用XML 解析器实现相同性能目标的花费仅为前者的1/10。
图1 XML 解析器的工作模式3 现行的两种XML 解析方式:DOM 和SAX3.1 DOMDOM 是以层次结构组织的节点或信息片断的集合。
这个层次结构允许开发人员在树中寻找特定信息。
分析该结构通常需要加载整个文档和构造层次结构,然后才能继续工作。
由于它是基于信息层次的,因而DOM 被认为是基于树或基于对象的。
DOM 以及广义的基于树的处理具有几个优点:首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构做出更改;它还可以在任何时候在树中上下导航,而不是像SAX 那样是一次性的处理。
DOM 使用起来也要简单得多[3]。
另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,这也是DOM 应用的局限性,因此使用其他手段来处理这样的数据会更好。
3.2 SAX这种处理的优点非常类似于流媒体的优点。
分析能够立即开始,而不是等待所有的数据被处理。
而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。
这对于大型文档来说是个巨大的优点。
事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。
一般来说,SAX 还比它的替代者DOM 快许多。
但是SAX 却由于没有结构信息,而具有无法遍历的缺点。
表1将这两种解析方式作了简单明了的对比。
表1 两种解析方式的比较 优缺点解析方式 优点缺点DOM易用性强,遍历简单,支持XPath解析速度太慢,内存占用过高(原文件的5x ~10x ),对于大文件来说几乎不可能使用SAX解析速度快,内存占用不与XML 大小相联系(可以做到XML 涨,内存不涨)易用性差,因为没有结构信息,无法遍历,不支持XPath ,可维护性差4 新的解析方式VT D -XML4.1 VT D —XMLV TD (Virtual Token Descriptor )———虚拟令牌描述符,是一种类似于DOM 和SAX 的处理模式,但是它具有这两种解析方式都不具备的优点。
前面讲了,DOM 和SAX ,两者都需要构建一个复杂的内存中的数据结构,以及在这些模型中任意向前浏览或向后浏览的能力。
它们还使用动态数据结构,这种结构会随着时间不断变化,并且截取任意大小的数据块有时候会非常大。
而V TD 处理技术就是在充分考虑了以上弊端的基础上产生的,并且发展迅速。
V TD -XML 是一种新型的、开源的、非提取性的XML 处理方式。
不同于现行的XML 处理技术,V TD -XML 能够实现数据的随机存取,而不会导致过多的资源浪费。
该格式的一个关键优化性能就在于它采用了非提取性的令牌环结构。
V TD -XML 在内存中完整保存了未经编码的XML 信息,令牌代表的是使用了专用起始偏移量和长度的令牌。
该令牌是基于虚拟令牌描述符的二进制编码规范。
一条V TD 格式的信息大小是64比特的整数倍,其中包含有XML 令牌长、起始偏移量、类型和嵌套深度的编码(如图2所示)。
为了实现非提取(non -extractive )这个目的,V TD 将原XML 文件原封不动地以二进制的方式读进内存,连解码都不做,然后在这个字节(byte )数组上解析每个元素(element )的位置并把一些信息记录下来,之后的遍历操作便在这些保存下来的记录(record )上进行,如果需要提取XML 内容就利用记录中的位置等信息在原始字节数组上进行解码并返回字符串[4]。
注意V TD 是固定长度的(官方决定用64bits ),这样做的目的就是为了提高性能,因为长度固定,在读取、查询等操作的时候就具有显著的高效性,也就是可以用数组这种高效的结构来组织V TD ,这就大大减少了因为大量使用对象而产生的性能问题。
V TD 的能力就在于它能够将XML 这种树形的数据结构简单地变换成对一个字节数组的操作,任何需要的对字节数・14・第10期 陈 娟等:XML 文档快速解析技术研究组的操作都可以应用在XML 上。
这是因为读取进来的XML 是二进制的(byte 数组),而V TD 则记录了每个元素的位置等访问信息,当找到要操作的V TD 的时候,只要用起始位置与长度等信息就可以对原始字节数组进行任何操作,或者可以直接对V TD 进行操作。
举例来说,要在一个大XML 中找出一个元素并删除它,那么只需要找到这个元素的V TD (遍历方法稍候再讲),将这个V TD 从V TD 数组中删除,然后再利用所有的V TD 写出到另一个字节数组中就可以了,因为删除的V TD 标明了要删除的元素的位置,所以在新写入的字节数组中就不会出现这段元素了,用V TD 写入新的字节数组实际上就是一个字节数组的拷贝,其效率相当地高,这就是所谓的增量更新(incremental up 2date )。
图2 一条V TD 记录的比特层格式关于V TD -XML 的遍历方式,它采用了LC (Lo 2cation Cache )结构,简单地说就是将V TD 以其深度作为标准构建的一个树形的表结构。
LC 的条目(entry )也是64bits 长的数值类型,前32bits 代表一个V TD 的索引(index ),后32bits 代表了这个V TD 的第一个子(child )的索引。