admin 管理员组文章数量: 1184232
2024年4月20日发(作者:java接口实例代码)
维普资讯
第28卷 第22期
VO1.28
NO.22
计算机工程与设计
Computer Engineering and Design
2007年11月
NOV.2007
基于DOM解析器的XML编辑器研究
戴蓓洁, 余双, 金蓓弘
(中国科学院软件研究所软件工程技术中心,北京100080)
摘 要:DOM是一种独立于语言和平台的XML解析模型。给出了支持DOM核心模型和多种DOM扩展规范的XML编辑器
0NcExMLEdit0r的实现。ONCEXMLEditor具有高效的XML验证和序列化性能,同时提供给用户多种功能,包括按需遍历文
档、提供上下文感知的编写环境、实时纠错、灵活的装载和序列化机制等。描述了0NcExMLEdit0r的体系结构及其实现核心
算法,同时给出了XML文档有效性验证和装载及序列化的性能优化策略。
关键词:可扩展标记语言编辑器;文档对象模型;按需遍历;实时纠错;定制保存
中图法分类号:TP39 文献标识码:A 文章编号:1000—7024(2007)22—5334.04
XML editor based on efifcient DOM parser
DAI Bei-jie,YU Shuang, JIN Bei-hong
(Technology Center ofSoftware Engineering,Institute ofSoftware,Chinese Academy ofSciences,Beijing 100080,China)
Abstract:DOM is a language and platform—neutral XML parsing mode1.Based on the implementation ofDOM Core model nad several
DOM extended speciifcations,an XML editor ONCEXMLEditor is developed.Depending on its built—in efifcient XML validation nad
serializing,ONCEXMLEditor Can provide versatile capabilities for end—users,including giving custom—made rtaversal of XML docu—
ments,presenting context—aware editing,be capable of correcting errors immediately,along with flexible load and save mechanism.
The architecture of ONCEXMLEditor is described and its essential algorithms is shown and the performance tuning policies for XML
document loading and saving as well as XML validation are obtained.
Key words:XML editor;DOM;custom--made traversal;real--time error correction;customized saving
0引 言
DOMCore,使得用户能更简单和直接地操作文档。这些扩展
规范包括带过滤器的装载和序列化规范即LoadandSave规范、
可扩展标记语言(extensible markup lnaguage,XML) 是由
支持DOM树事件触发机制的Event规范、支持对DOM树结
万维网联盟(world wide web consortimu,w3c)定义的一种标记 构进行遍历查找的Traversal规范,以及与XML文本编辑对应
语言,目前已被广泛用于组织、存储和交换信息。为了更好的 ’的、支持DOM树编辑功能的Range规范。不少主流的XML
发挥XML跨平台的特性,需要一个标准的、跨平台的、不依赖
编辑器(如<oXygen/>XML Editors 和Altova XMLSpyt )和浏览
任何语言和具体实现的XML表示和使用模型。W3C定义的
器都支持部分DOM扩展规范。
DOM(docmuentobjectmode1) 模型定义了XML数据表示和数
我们在中国科学院软件研究所软件工程技术中心开发的
据操作的接口,它不与任何语言和平台绑定。相比之下,XML
ONCEDOMParser1.0ts]的基础上,设计和实现了支持DOMLevel
的其它解析模型如SAX0 、StAX“ 都不能满足此要求。
3核心模型以及相关扩展规范的XML编辑器——0NcE—
DOM是目前为止惟一成为W3C正式标准的XML解析 XMLEditor。本文首先介绍0NcExMLEdit0r的体系结构,给
模型,几乎所有的编程语言实现,包括Java、c/c++、Perl、Java- 出了0NcExMLEdit0r实现中的核心算法,然后总结了实现过
Script等,都提供支持DOM的解析器。JI)K(Java development
程中的主要优化措施,并给出了性能测试结果,最后进行总结。
kit)1.4/1.5在JAXP(JavaAPIforXMLprocessing) 中也定义了专
门的接口来支持DOM模型。DOM的特点是用树结构表示整
l系统体系结构
个XML文档,树上的每一个节点都对应DOM模型中的一个
0NcExMLEditor基于DOM解析方式,提供x】ⅥL文档的
节点对象,用户可以通过DOM接口访问和修改XML文档。 编辑功能,具有按需遍历文档、定制保存、实时纠错、XML文
考虑到DOMCore模型并不能满足对DOM的各种高级操作, 档验证(包括良构性验证和有效性验证)、根据读入的XML文
W3C还制定了DOM扩展规范,提供了更便捷的接口来补充
档生成DTD文件和提供上下文感知的编写环境等功能。ON一
收稿日期:2006—12.05 E・mail:bjdailM@otcaix.iscas.ac.ca
作者简介:戴蓓洁(1983一),女,浙江杭州人,硕士研究生,研究方向为分布式计算; 余双(1982一),男,硕士研究生,研究方向为分布式计
算; 金蓓弘(1967--),女,博士,副研究员,研究方向为分布式计算、软件工程技术。
-——
5334-——
维普资讯
cEⅪ LEditor采用两种视图模式来呈现XML文档编辑视图,
其中主视图采用Text视图模式,用户可以在此视图模式下修
改文档的结构和数据;Tree视图是辅助视图,采用树形结构呈
现XML文档,并提供对树节点的增、删、改操作。除此之外,
式却不容易找到它们。这是因为,按标准的DOM方式,必须
找到根元素,先找根元素下的book元素,找到每本书的descrip—
tion元素,再查找keyword元素,判断keyword元素的属性是否
为“true”,然后才能查找keyword元素的内容中是否包含“com—
0NcExMLEditor还具备一些基本的编辑功能,比如支持文档
,
,
puter”关键字。可见,采用标准的DOM接口,即使对于这项普
、
、
、
、
、
、
之间的比较、呈现不同和合并等功能。 通的任务,也需要许多代码来实现。而采用DOMTraversal的
功能,用户无需编写冗长的节点迭代代码,只需编写过滤器的
acceptNode()方法,在其中检查节点的类型、属性名和属性值,
根据功能和模块独立性,0NcExMLEditor分成7部分。
图l给出0NcExMLEditor的主要包及其依赖关系,其中Editor
包用于实现此编辑器的图形界面及控制逻辑,DOMCoreParser
包用于实现DOMLevel 3Core规范中定义的各个接口,Validity
包用于实现XML规范规定的有效性验证功能,Traversal包、
从而判断是接受还是拒绝该节点。Editor包利用DOMTraversal
包,实现按需遍历文档的功能。
DOM Event规范指定了事件注册、监听、触发和传播的规
Event包、Load and Save包分别用于实现D0M Level 3 Traversal
规范、Event规范、Load nad Save规范中定义的各个接口。
、
、
目/,,
图1 ONCEXMLEditor包结构关系
DOM核心规范定义了表示和管理文档的核心接口,是所
有DOM功能的基础,任何支持DOM解析的工具必须首先支
持DOM核心规范。DOM核心规范不仅定义了代表XML不
同语法单元的节点,还定义了这些节点之间的关系。这样,节
点间的父、子、兄弟等关系就反映了整个XML文档的逻辑结
构。DOM对XML文档的处理方式就是将一个XML文档读
入内存,解析后按节点间的逻辑关系构造“DOM树”,并提供
一
组接口访问和修改节点。DOM Core parser包复用了ON—
CEDOMParser1.0的功能,实现了DOM核心规范,在ON.
CEXMLEditor中提供语法解析、文档构建和文档访问的功能。
DOM Traversal规范定义了两种遍历文档的方式:一种是
调用Nodelterator接口,采用平面的视角遍历文档。遍历文档
的过程中,用户可以调用接口得到前一个和后一个满足需要
的节点。另一种方式是调用TreeWalker接口,以层级的视角
来遍历文档。用户可以调用接口来获得当前节点的满足要求
的“父”节点、“子”节点和“兄弟”节点等。无论调用哪种接口,
都是按照文档的中序规则,实现遍历过程。此外,DOMTrave.
rsal规范还给用户提供了NodeFilter接口,用于过滤节点。
Traversal包实现了DOM Traversa!规范,提供用户根据特
定需求遍历文档并将其呈现出来的功能。现以在线书籍目录
的处理场景为例说明DOM Traversal的功能。其中一个常见
场景是允许用户通过关键字搜索书籍。例如,用户可能想要
搜索有关“computer”、“economy”或其它任何关键字的书籍。
这些关键字出现在这些书籍的描述中,但使用标准的DOM方
则。DOM树的节点通过对特定事件的注册,可以捕捉诸如用
户对节点子树的修改、添加等事件,并对事件做相应的处理。
发生的事件首先从DOM树根节点传播到事件发生地(即目标
节点)的父节点,触发节点上以capturing方式监听的事件监听
者,这个阶段称为捕捉;然后传播到事件的目标节点,并触发
相应的事件监听者;最后从事件的目标节点的父节点传播到
根节点,触发节点上以bubbling方式监听的事件监听者,这个
阶段称为冒泡。Event包实现了DOMEvent规范,提供给用户
一
个通用的事件触发系统。采用DOM Event的事件触发机
制,Editor包向用户提供了实时纠错的功能。当用户修改了
Tree视图中和元素的名字空间相关的数据时,编辑器会实时
判断修改的有效性,并做出更正。
DOM Load and Save规范包括两个功能:①读取XML文
档,并在内存中构建相应的DOM树,这个过程叫做装载;②将
DOM树或者DOM树的一部分,输出为一个XML文档,这个
过程叫做序列化。在装载和序列化的过程中,用户可以使用
基于DOM Level 3 Core的DOMConfiguration类的扩展属性
domConfig配置装载和序列化过程中的参数,并且每个节点在
被装载或序列化之前可以调用过滤器按需过滤部分文档内容。
Load nad Save包实现了DOM Load nad Save规范,Editor包利
用Loadand Save包来完成文档解析和定制保存的功能。
DOM Range规范提供用户编辑XML文档的通用方法。
在图形用户界面中,用户按下鼠标选中文档的一部分,把这个
选择区域作为一个Range返回给DOM用户。接着用户可以
对这个Range包含的内容进行增、删、改等操作。Range包实
现了DOMRange规范,Editor包利用Range包对用户在Text视
图中的删除、复制和粘贴等操作提供实时纠错功能,例如针对
用户对特定选中区域的删除操作,系统会检查删除后文档标
签的正确嵌套性,并自动添加误删的开始或结束标签。
Validiyt包实现了对一个XML文档的有效性验证功能。
它根据读取DTD部分时确定的有效性验证规则,来判断XML
文档的非DTD部分是否符合这些法则。Editor包依赖此模块
实现对文档的有效性验证。
2 ONCEXMLEditor的核心算法
2.1按需遍历
当用户点击“按需遍历”菜单项时,编辑器首先让用户选择
遍历文档的方式(平面视角或层次视角)、需要呈现的节点类型
和名字过滤器需保留的节点名,然后编辑器就会根据用户输
-——
5335-——
维普资讯
入的参数创建一个遍历器,并呈现可供用户按需遍历的视图。
图2给出了系统实现“用户按需遍历文档”的时序图。当
用户以平面的视角按需遍历满足需求的上一个或下一个节点
时,系统会调用实现以平面视角遍历的Nodelterator对象的pre-
viousNode0或nextNode0方法。以nextNode0方法为例,该方
法首先按文档顺序获得下一个节点,然后调用名字过滤器的
acceptNode0方法判断此节点是否能被过滤器接受,如果不被
接受,则继续以上操作;如果遍历了所有节点都无符合要求的
节点,则返回null,否则返回当前节点。
匡 —Nod eItera—torImp1]
:堇煎垄旦: 氟 蔫 。
返回此Node I1
.…
at 量一.』j
调用nextNode方法,:
实现“遍历下一节点 功能
用nextNodeInDoc方法返回
文档顺序的下一个节点
-I :
用acceptNode方溜决定
节点是否被接受一:
踅 ! .
图2按需遍历文档的工作流程
不论是采用平面的视角还是层次的视角遍历文档,一旦
用户修改了文档的结构,两者都必须实时响应动态改变,不能
因为文档结构的改变而产生任何无效操作。若用户按平面的
视角遍历文档,我们将用户当前选中的节点作为参考节点,遍
历上一个或下一个节点的操作都是基于这个节点的。增加或
删除非参考节点并不会对后续的遍历操作有任何影响;而对
于参考节点被删除的情况,系统需要重置参考节点。若用户
按层次的视角遍历文档,那么,我们同样将用户当前选中的节
点作为参考节点。当用户在遍历过程中修改了名字过滤器后,
参考节点可能会被过滤器过滤,但用户仍可以继续遍历该节
点的子节点,只是作为一个孤儿节点,用户不能继续遍历该节
点的父节点和兄弟节点。
2.2实时纠错
当用户在Tree视图中修改节点的元素名和属性名时,编
辑器对于被修改的节点会调用此节点对象的notifyEventFired0
方法传播事件。notif),EventFired()方法首先根据传入的事件类
型生成相应的事件、初始化事件、并将此节点设置为目标节
点,然后由该目标节点调用dispatchEvent0方法传播事件流。
出于对效率的考虑,dispatchEvent0方法首先调用getPath()
方法遍历从事件的发生地即目标节点到文档根节点这条事件
传播路径,记录事件传播路径上注册了相关事件监听者的节
点和监听器,并返回记录此信息的Vector类型对象nodesIn—
Path。接着,根据所记录的监听器信息,首先触发以capturing
方式注册的事件监听器,然后调用触发事件的目标节点上的
监听器处理程序,最后触发以bubbling方式注册的事件监听
器。这样,事件监听器就会根据触发的事件判断用户对此节
点修改的正确性。
2.3定制保存
用户点击“保存”菜单项后,编辑器首先会让用户选择和
定制保存相关的参数。例如是否保存DTD、是否保存COM.
-——
5336-——
MENT、是否保存PI、是否保存XML.Declaration和是否按缩进
格式输出,选择编码方式、需过滤的节点名以及目标保存路径
等。编辑器首先根据用户输入的参数创建一个序列化器
LSSerializer对象serializer和一个实现封装序列化输出数据流
的LSOutput对象destniation,然后serializer调用write()方法进
行序列化。下面我们以write(NodenodeArg,LSOutputdesifnmion)
为例,介绍序列化节点的算法。
序列化节点的算法:
步骤l通过LSOutput类型的对象destination,得到序列
化结果的输出目的地,以及输出的其它相关信息,如输出流的
编码方式等。然后将它封装为一个java.io.Writer对象;
步骤2根据java.io.Writer对象生成一个LSPrinter对象
printer,每次使用这个printer序列化不同节点的信息;
步骤3读取配置信息,设置相应的序列化参数;
步骤4递归序列化节点子树;
步骤5结束序列化过程。
递归序列化节点子树的算法recordSubTree():
switch(nodeType){
对于节点类型是DOCTYPE、CDATA、TEXT、COMMENT、
PI的情况:
如果设置为保留该节点,则直接输出节点信息,返回;
对于Element类型的节点:
如果该节点不支持名字空间或者支持名字空间,但其
祖先节点是Entity类型的节点,则直接输出此元素的元素名和
每个属性的属性信息,并对它的每个子节点递归调用record-
SubTree0方法;
否则,
步骤l 需要记录下所有的namespace declaration attribu-
tes,调用normalizeNamespace()方法进行元素名的名字空间一
致性修复并输出该元素名;
步骤2对该元素所有的 ̄namespacedeclarationattribu-
tes,调用normalizeNamespace()方法进行属性的名字空间一致
性修复,并输出属性信息。
步骤3对该节点的每个子节点,递归调用recordSub-
Tree()方法;
对于EntiytReference类型的节点:
如果设置为替换实体引用,并且实体引用有替换文本,
则序列化输出该实体引用的子节点;
否则直接输出节点信息,并不序列化该实体引用的子
节点。
对于Document类型或DocumentFmgment类型的节点:
递归调用recordSubTree0方法来序列化每个节点。
3性能优化
为了实现对0lNCEⅪvILEditor的有效性验证和高效解析
及序列化,我们采取了一些优化措施。下面将对重要的性能
优化措施给出分析。
3.1基于统计规律的有效性验证优化策略
有效性验证模块首先对DTD部分进行解析,记录属性和
元素声明相关的信息,然后在解析正文时根据记录的法则验
维普资讯
证其有效性。由于解析过程是针对文档的标记逐条进行的,
所以采用先识别高频属性类型,然后处理低频类型的方法将
直接影响验证效率。通过对一些典型的XML文档进行统计,
我们统计出各种标记、字符数据出现的频率。表1和表2给
况下,对节点的所有信息都进行访问的概率不大,我们采用了
延迟装载节点对象的策略,仅当用户访问有关节点信息时才
从有关的用户堆中复制出节点信息,这样不仅减少了不必要
的信息复制,还提高了解析效率。
出了统计结果。
表1属性类型频率统计
属性类型 出现频率/%
CDATA 74 l
NMTOKEN 10.97
ENUMERATION 9 2
ID 5.55
Other 0.18
表2 DTD中标记频度统计
标记类型 出现频率/%
AttListDec1 64.82
Comment 18-35
EntityDec1 l3.24
ElementDec1 3 59
Otl1er 0.o0
根据上面的统计,可以看出对于DTD部分的解析,可以
按照AttListDecl、Comment、EntityDecl、ElementDecl的次序进行
判断;而在属性的有效性验证过程中,按照CDATA、
NMTOKEN、ENUMERATION、ID等的次序进行验证可达到优
化的目的。
3.2节点池对文档装载性能的优化
DOM Load模块的解析功能主要由LSDOMParserlmpl类
完成。LSDOMParserlmpl和DOM Core Parser的最大不同是可
以在解析的同时按需过滤部分文档。如果用户在解析过程中
选择使用过滤器,则解析器在解析完一个语法单元之后,需要
将这个语法单元节点传递给过滤器,由过滤函数来决定是否
保留该节点。为了减少对象的创建,我们在LSDOMParserlmpl
中引入了一个公用节点池来装载要传递给过滤器的节点内容,
节点池中包括各种不同类型的节点。在解析完一个语法单元
之后,首先获得节点池中相应节点类型的数据结构,然后在此
数据结构中加载节点信息,并传递给过滤器方法。经过过滤
器判断后,这个节点被放回节点池中供解析器下次继续使用。
规范提供了两种过滤方法,一种是在碰到元素的结束标签时,
使用acceptNode0方法过滤节点;另一种是在碰到元素的开始
标签时,调用startElement0方法过滤节点。引入startElement0
方法的目的是为了提高解析效率,例如对于在解析开始标签
时已经确定被过滤的节点,解析器就不再需要完整解析它的
节点信息。
3.3基于DOM解析模型的基本优化策略
按照DOM解析模型,在内存中构建DOM树时需要创建
大量对象,而对于大量对象的管理和维护会引入较大的开销,
影响效率。针对这个问题,0NcEX1 LEditor引入了用户堆的
概念,用来管理字符串对象、集合对象和节点对象,减少Java
虚拟机在对象管理方面的开销。
由于每个节点对象包含的信息量很大,而用户在较多情
4性能测试
我们利用Sun提供的XML Testl、1 的标准测试文档
invl00.xml以及由invl00.xml生成的各种大小的XML文档,
对Xerces【 l和0NcExMLEditor进行了性能测试。mvl00.xml
描述的是一个发货单,大小为100 k,主要由一系列货物信息
(Lineltem元素)构成,每个Lineltem元素又包含6个子元素,
Pricing是其中一个子元素。
测试环境采用Intel Pentuim 4 CPU 2.4 GHz,512 G DDR内
存的PC机。操作系统是Windows XP Professional with Service
Pack2,Java的运行环境是J2SE 1.4.2,虚拟机参数设置为“.XX:
CompileThreshold=100—-XX:+AggressiveHeap—Xms512M—Xmx
1024M”,将机器内存全部分配给JVM,并且设置CPU为抢占
模式,同时设置虚拟内存为1 G。在该测试环境下,我们首先
使用测试程序测试了Xerces和0NcExMLEditor中有效性验
证模块的解析性能。图3中,Xerces表示Xerces2.7、1版本中支
持有效性验证的解析性能,ONCE表示0NcExMLEditor中支
持有效性验证的模块的解析性能,DOM.TEST. 表示XML
Test1.1定义的6种测试标准,测试数据表示在XMLTest1.1定
义下的事务吞吐量。图3的数据表明0NcExMLEdic0r有效
性验证模块的解析性能平均优于Xerces30%以上。
事务数340
一~
290
’
240
190
3
140
\\一。。 …
::善:::
90
; 4。 ; 测试甩例
一
+一Xerces(支持名字空间):-・・ONCE(支持名字空间)
十Xerces(不支持名字空间);—。^一ONCE(不支持名字空间)
图3有效性验证模块的解析性能
然后,我们分别测试了Xerces和0NcExMLEditor中Load
and Save模块的过滤解析性能。测试程序分别测试了过滤文
档中Pricing元素节点、接受Pricing元素节点和过滤Pricing元
素节点的节点子树的性能。图4的数据表明0NcExMLEditor
的过滤解析性能平均优于Xercesl5%。
我们还分别测试了比较0NcExMLEditor和Xerces的序
列化方法writeToString0和write()的性能,测试结果如图5所
示。其中,write()方法序列化一个节点,将结果保存到LSOutput
类型的对象中。writeToString0方法是将序列化后的内容保存
到一个String中。这两种方法都是规范中提供的标准接口。
可以看出,ONCE的序列化性能明显比Xerces性能快,其中
write()方法平均性能高出Xerces 49%,writeToString0方法平均
高出Xerces 34%。 (下转第5358页)
・——
5337・——
维普资讯
sasWorkspace.LanguageService.StoredProcessService.Re—
pository=path;//path是SAS的仓库路径
sasWorkspace.LanguageService.StoredProcessService.Exe—
参考文献
【l】 张卓.SAS软件的应用——基于ARIMA模型的商品销售额
的预测分析【J】_统计与信息论坛,2005,2O(4):104—106.
【2】 秦立轩.统计软件SAS与数据的读取【J】_数理医药学杂志,
2003,l6(2):166—169.
cute(”init”);//init表示Init.SAS,是仓库路径里面的文件,执行上
述代码后,SAS工作台会将Init.SAS里面的代码提交到SAS服
务器,当然我们还可以增加参数
sasWorkspace.LanguageService.Submit(”proc mealls data=
【3】 阮桂海.SAS统计分析实用大全【M】.北京:清华大学出版社,
2003:60一lOO.
sashelp.class;run;proc report;run;”);∥直接提交SAS语句
(6)读取执行结果
sasWorkspace.LanguageService.FlushList(100);//读取输出
的结果,我们也可以读取Log以及其它的输出
(7)关闭连接
sasPoo1edObject.RetumToPool0;//关闭Pool。调用结束后,
【4】 奉国和.基于SAS数据挖掘技术的航空CRM系统分析【J】-.隋
报杂志,2006,24(5):56—59.
【5】 李春生,罗晓沛.基于.NET实现分布式数据库查询【J】_计算机
工程与设计,2007,28(12):2937—2939.
【6】 胡峰稳,杨娟,姜兆华,等..NET下基于WebService实现Crystal—
Report与数据库的连接【J】_软件导刊,2006,4(21):44—46.
【7】 王操,许云才,张晓初,等.基于XML和虚拟数据中心的网上城
市数据集成【J】_计算机工程,2003,29(21):61—63.
应该将SAS关闭以释放内存空间。否则,会使内存占用越来
越多,导致系统崩溃
5结束语
本文介绍了SAS的功能,并通过一个简单的例子来说明
在.NET平台下,如何利用c 语言、IOM来实现读取SAS数据、
执行SAS代码的方法。利用此方法,可以将SAS强大的分析
功能和c 语言的易开发性结合起来,发挥这两个方面的优点,
构建更强大的应用系统。
【8】 刘波,雷刚跃,杨路明,等.基于.NET平台通用数据库组件的设
计与实现【J】_计算机工程与设计,2007,28(6):1415—1417.
【9】 沈晟,沈炳炎.基于DCOM/COM+的分布式随机库存管理系统
应用研究【J】.计算机工程与设计,2007,28(12):295 1-2953.
【lO】李美满,夏汉铸,易德成.基于COM技术的通用考试系统的设
计与实现【J】_计算机工程与应用,2007,43(1):245—248.
(上接第5337页)
5000
4500
4000
3500
3000
试结果表明,ONcExMLEditor的有效性验证模块和Load and
圜 匿
~
一
≤ 《
l一8
{ ’ _
§ ; I
§ l l
目且 § l j
■::圈 。 I
■。匿舅圈一 慝量 } l l
一
Save模块在解析和序列化的性能方面明显高于目前最流行的
XML parser Xerces。
我们将进一步扩充编辑器的功能,包括在ONCEXMLEdi—
tor中增加对XML Schema的支持等,使之更加实用和好用。
参考文献:
【l】 World Wide Web Consortium.Extensible markup lnguage a
(XML)1.0【S/0L].3rd Ed.http://www.w3.org/TR/REC-xml/,2004.
【2】 World Wide Web Consortium.Document object model(DOM)
【S/0 L】_http:llwww.w3.org/DOM/,2005.
【3】 Simple API for xML【S/OL].http://www.saxproject.ore,/,2004.
【4】Java Community Process,JSR 173:Streaming API for XML【S/
一
翻
.
. . .
一, .
l
l l
ll I
1 l .1一
疆
OL].http://www.jcp.org/en/jsr/detail?id=l 7362004.
【5】Java API orf XML processing[S/OL】.http://java.sun.corrdxml/
jaxp/indexdsp.
【6】<oXygen/>XML Editor[EB/OL].http://www.oxygenxm1.com/.
【7】Altova XML spy 2006【EB/OL】.http:llwww.altova.com/pro—
ducts/xmlspy/xmleditor.htm1.
_
【8】 GUO Hongyan,YANG Bo,JIN Bei—hong.Reserch on high per-
formance DOM implementation[J].Computer Science,2006,33
(6):274—277.
【9]XML Test v1.1,Sun Microsystems【S/OL】.http://java.Sn.ucorn/
performance/reference/codesamples/,2004.
【10】The Apache XML Project:Xerces Java 2[S/OL].http://xm1.apa-
che.org/xerces2-j/.
版权声明:本文标题:基于DOM解析器的XML编辑器研究 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713548531a640222.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论