|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。xml|对照1.先容
1)DOM(JAXPCrimson剖析器)
DOM是用与平台和言语有关的体例暗示XML文档的官方W3C尺度。DOM是以条理布局构造的节点或信息片段的汇合。这个条理布局同意开辟职员在树中寻觅特定信息。剖析该布局一般必要加载全部文档和机关条理布局,然后才干做任何事情。因为它是基于信息条理的,因此DOM被以为是基于树或基于对象的。DOM和狭义的基于树的处置具有几个长处。起首,因为树在内存中是耐久的,因而能够修正它以便使用程序能对数据和布局作出变动。它还能够在任什么时候候在树中高低导航,而不是像SAX那样是一次性的处置。DOM利用起来也要复杂很多。
2)SAX
SAX处置的长处十分相似于流媒体的长处。剖析可以当即入手下手,而不是守候一切的数据被处置。并且,因为使用程序只是在读取数据时反省数据,因而不必要将数据存储在内存中。这关于年夜型文档来讲是个伟大的长处。现实上,使用程序乃至不用剖析全部文档;它能够在某个前提失掉满意时中断剖析。一样平常来讲,SAX还比它的替换者DOM快很多。
选择DOM仍是选择SAX?关于必要本人编写代码来处置XML文档的开辟职员来讲,选择DOM仍是SAX剖析模子是一个十分主要的计划决议。DOM接纳创建树形布局的体例会见XML文档,而SAX接纳的事务模子。
DOM剖析器把XML文档转化为一个包括其内容的树,并能够对树举行遍历。用DOM剖析模子的长处是编程简单,开辟职员只必要挪用建立的指令,然后使用navigationAPIs会见所需的树节点来完成义务。能够很简单的增加和修正树中的元素。但是因为利用DOM剖析器的时分必要处置全部XML文档,以是对功能和内存的请求对照高,特别是碰到很年夜的XML文件的时分。因为它的遍历才能,DOM剖析器经常使用于XML文档必要频仍的改动的服务中。
SAX剖析器接纳了基于事务的模子,它在剖析XML文档的时分能够触发一系列的事务,当发明给定的tag的时分,它能够激活一个回调办法,告知该办法制订的标签已找到。SAX对内存的请求一般会对照低,由于它闪开发职员本人来决意所要处置的tag。出格是当开辟职员只必要处置文档中所包括的部分数据时,SAX这类扩大才能失掉了更好的表现。但用SAX剖析器的时分编码事情会对照坚苦,并且很难同时会见统一个文档中的多处分歧数据。
3)JDOMhttp://www.jdom.org
JDOM的目标是成为Java特定文档模子,它简化与XML的交互而且比利用DOM完成更快。因为是第一个Java特定模子,JDOM一向失掉鼎力推行和增进。正在思索经由过程“Java标准哀求JSR-102”将它终极用作“Java尺度扩大”。从2000岁首就已入手下手了JDOM开辟。
JDOM与DOM次要有两方面分歧。起首,JDOM仅利用详细类而不利用接口。这在某些方面简化了API,可是也限定了天真性。第二,API大批利用了Collections类,简化了那些已熟习这些类的Java开辟者的利用。
JDOM文档声明其目标是“利用20%(或更少)的精神办理80%(或更多)Java/XML成绩”(依据进修曲线假定为20%)。JDOM关于年夜多半Java/XML使用程序来讲固然是有效的,而且年夜多半开辟者发明API比DOM简单了解很多。JDOM还包含对程序举动的相称普遍反省以避免用户做任安在XML中偶然义的事。但是,它仍必要您充实了解XML以便做一些超越基础的事情(大概乃至了解某些情形下的毛病)。这大概是比进修DOM或JDOM接口都更成心义的事情。
JDOM本身不包括剖析器。它一般利用SAX2剖析器来剖析和考证输出XML文档(只管它还能够将之前机关的DOM暗示作为输出)。它包括一些转换器以将JDOM暗示输入成SAX2事务流、DOM模子或XML文本文档。JDOM是在Apache允许证变体下公布的开放源码。
4)DOM4Jhttp://dom4j.sourceforge.net
固然DOM4J代表了完整自力的开辟了局,但最后,它是JDOM的一种智能分支。它兼并了很多超越基础XML文档暗示的功效,包含集成的XPath撑持、XMLSchema撑持和用于年夜文档或流化文档的基于事务的处置。它还供应了构建文档暗示的选项,它经由过程DOM4JAPI和尺度DOM接口具有并行会见功效。从2000下半年入手下手,它就一向处于开辟当中。
为撑持一切这些功效,DOM4J利用接口和笼统基础类办法。DOM4J大批利用了API中的Collections类,可是在很多情形下,它还供应一些替换办法以同意更好的功能或更间接的编码办法。间接优点是,固然DOM4J支付了更庞大的API的价值,可是它供应了比JDOM年夜很多的天真性。
在增加天真性、XPath集成和对年夜文档处置的方针时,DOM4J的方针与JDOM是一样的:针对Java开辟者的易用性和直不雅操纵。它还努力于成为比JDOM更完全的办理计划,完成在实质上处置一切Java/XML成绩的方针。在完成该方针时,它比JDOM更少夸大避免不准确的使用程序举动。
DOM4J是一个十分十分优异的JavaXMLAPI,具有功能优秀、功效壮大和极度易用利用的特性,同时它也是一个开放源代码的软件。现在你能够看到愈来愈多的Java软件都在利用DOM4J来读写XML,出格值得一提的是连Sun的JAXM也在用DOM4J。
2..对照
1)DOM4J功能最好,连Sun的JAXM也在用DOM4J。今朝很多开源项目中大批接纳DOM4J,比方赫赫有名的Hibernate也用DOM4J来读取XML设置文件。假如不思索可移植性,那就接纳DOM4J.
2)JDOM和DOM在功能测试时体现欠安,在测试10M文档时内存溢出。在小文档情形下还值得思索利用DOM和JDOM。固然JDOM的开辟者已申明他们希冀在正式刊行版前专注功能成绩,可是从功能概念来看,它的确没有值得保举的地方。别的,DOM还是一个十分好的选择。DOM完成普遍使用于多种编程言语。它仍是很多别的与XML相干的尺度的基本,由于它正式取得W3C保举(与基于非尺度的Java模子绝对),以是在某些范例的项目中大概也必要它(如在JavaScript中利用DOM)。
3)SAX体现较好,这要依附于它特定的剖析体例-事务驱动。一个SAX检测行将到来的XML流,但并没有载进到内存(固然当XML流被读进时,会有部分文档临时埋没在内存中)。
3.四种xml操纵体例的基础利用办法
xml文件:
<?xmlversion="1.0"encoding="GB2312"?>
<RESULT>
<VALUE>
<NO>A1234</NO>
<ADDR>四川省XX县XX镇XX路X段XX号</ADDR>
</VALUE>
<VALUE>
<NO>B1234</NO>
<ADDR>四川省XX市XX乡XX村XX组</ADDR>
</VALUE>
</RESULT>
1)DOM
importjava.io.*;
importjava.util.*;
importorg.w3c.dom.*;
importjavax.xml.parsers.*;
publicclassMyXMLReader{
publicstaticvoidmain(Stringarge[]){
longlasting=System.currentTimeMillis();
try{
Filef=newFile("data_10k.xml");
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
DocumentBuilderbuilder=factory.newDocumentBuilder();
Documentdoc=builder.parse(f);
NodeListnl=doc.getElementsByTagName("VALUE");
for(inti=0;i<nl.getLength();i++){
System.out.print("车商标码:"+doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
System.out.println("车主地点:"+doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
}
}catch(Exceptione){
e.printStackTrace();
}
2)SAX
importorg.xml.sax.*;
importorg.xml.sax.helpers.*;
importjavax.xml.parsers.*;
publicclassMyXMLReaderextendsDefaultHandler{
java.util.Stacktags=newjava.util.Stack();
publicMyXMLReader(){
super();
}
publicstaticvoidmain(Stringargs[]){
longlasting=System.currentTimeMillis();
try{
SAXParserFactorysf=SAXParserFactory.newInstance();
SAXParsersp=sf.newSAXParser();
MyXMLReaderreader=newMyXMLReader();
sp.parse(newInputSource("data_10k.xml"),reader);
}catch(Exceptione){
e.printStackTrace();
}
System.out.println("运转工夫:"+(System.currentTimeMillis()-lasting)+"毫秒");}
publicvoidcharacters(charch[],intstart,intlength)throwsSAXException{
Stringtag=(String)tags.peek();
if(tag.equals("NO")){
System.out.print("车商标码:"+newString(ch,start,length));
}
if(tag.equals("ADDR")){
System.out.println("地点:"+newString(ch,start,length));
}
}
publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs){
tags.push(qName);}
}
3)JDOM
importjava.io.*;
importjava.util.*;
importorg.jdom.*;
importorg.jdom.input.*;
publicclassMyXMLReader{
publicstaticvoidmain(Stringarge[]){
longlasting=System.currentTimeMillis();
try{
SAXBuilderbuilder=newSAXBuilder();
Documentdoc=builder.build(newFile("data_10k.xml"));
Elementfoo=doc.getRootElement();
ListallChildren=foo.getChildren();
for(inti=0;i<allChildren.size();i++){
System.out.print("车商标码:"+((Element)allChildren.get(i)).getChild("NO").getText());
System.out.println("车主地点:"+((Element)allChildren.get(i)).getChild("ADDR").getText());
}
}catch(Exceptione){
e.printStackTrace();
}
}
4)DOM4J
importjava.io.*;
importjava.util.*;
importorg.dom4j.*;
importorg.dom4j.io.*;
publicclassMyXMLReader{
publicstaticvoidmain(Stringarge[]){
longlasting=System.currentTimeMillis();
try{
Filef=newFile("data_10k.xml");
SAXReaderreader=newSAXReader();
Documentdoc=reader.read(f);
Elementroot=doc.getRootElement();
Elementfoo;
for(Iteratori=root.elementIterator("VALUE");i.hasNext();){
foo=(Element)i.next();
System.out.print("车商标码:"+foo.elementText("NO"));
System.out.println("车主地点:"+foo.elementText("ADDR"));
}
}catch(Exceptione){
e.printStackTrace();
}
}
首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。 |
|