xml| comparison
1. Introduce
1 DOM (JAXP Crimson Parser)
DOM is the official consortium standard for representing XML documents in a platform-and language-independent way. A DOM is a collection of nodes or pieces of information organized in a hierarchical structure. This hierarchy allows developers to find specific information in the tree. Parsing the structure usually requires loading the entire document and the construction hierarchy before any work can be done. Because it is based on the information hierarchy, the DOM is considered to be tree based or object-based. Dom and the generalized tree-based processing have several advantages. First, because the tree is persistent in memory, it can be modified so that the application can make changes to the data and structure. It can also navigate up and down the tree at any time, rather than a one-time process like sax. Dom is much simpler to use.
2) SAX
The advantages of Sax processing are very similar to the advantages of streaming media. Analysis can begin immediately, rather than wait for all data to be processed. Also, because an application checks data only when it reads data, it does not need to store the data in memory. This is a great advantage for large documents. In fact, an application doesn't even have to parse the entire document; it can stop parsing when a condition is satisfied. In general, Sax is much faster than its replacement dom.
Select Dom or sax? Choosing a DOM or Sax parsing model is a very important design decision for developers who need to write their own code to work with XML documents. Dom uses a tree-structured approach to accessing XML documents, while Sax uses the event model.
The DOM parser converts an XML document into a tree containing its contents, and can traverse the tree. The advantage of using the DOM parsing model is that it is easy to program, the developer only needs to invoke the build instructions, and then use the navigation APIs to access the required tree nodes to complete the task. You can easily add and modify elements in the tree. However, because of the need to process the entire XML document with the DOM parser, the performance and memory requirements are high, especially when you encounter a large XML file. Because of its traversal capabilities, DOM parsers are often used in services where XML documents require frequent changes.
The SAX parser employs an event-based model that triggers a series of events when parsing an XML document, and when a given tag is found, it can activate a callback method that tells the method that the label has been found. Sax typically requires less memory because it lets developers decide which tag they want to handle. Especially when developers only need to work with some of the data contained in the document, Sax has a better ability to expand. But coding is difficult when using a SAX parser, and it is difficult to access multiple different data in the same document at the same time.
3) JDOM http://www.jdom.org
The goal of Jdom is to become a Java-specific document model that simplifies interaction with XML and is faster than using DOM. Because it is the first Java-specific model, JDOM has been vigorously promoted and promoted. is considering using the Java specification Request JSR-102 to eventually use it as a "java standard extension". Jdom has been developed since the beginning of the 2000.
There are two main differences between Jdom and Dom. First, Jdom uses only specific classes instead of interfaces. This simplifies the API in some ways, but it also limits flexibility. Second, the API uses a lot of collections classes, simplifying the use of Java developers who are already familiar with these classes.
The Jdom document declares that its purpose is "to use 20% (or less) energy to solve 80% (or more) java/xml problems" (assuming 20% according to the learning curve). Jdom is of course useful for most java/xml applications, and most developers find APIs much easier to understand than DOM. Jdom also includes a fairly extensive review of program behavior to prevent users from doing anything that is meaningless in XML. However, it still requires you to fully understand XML in order to do something beyond the basics (or even to understand some cases of errors). This may be more meaningful than learning a DOM or Jdom interface.
The jdom itself does not contain a parser. It typically uses the SAX2 parser to parse and validate the input XML document (although it can also represent the previously constructed DOM as input). It contains converters to output jdom representations as SAX2 event streams, DOM models, or XML text documents. Jdom is the open source that is released under the Apache license variant.
4) dom4j Http://dom4j.sourceforge.net
Although DOM4J represents a completely independent development result, it was initially an intelligent branch of Jdom. It incorporates a number of features beyond the representation of basic XML documents, including integrated XPath support, XML schema support, and event-based processing for large documents or streaming documents. It also provides the option to build the document representation, which has parallel access through the DOM4J API and the standard DOM interface. It has been under development since the second half of 2000.
To support all of these features, DOM4J uses interfaces and abstract basic class methods. DOM4J uses the collections class in the API heavily, but in many cases it also provides workarounds to allow for better performance or more direct coding methods. The immediate benefit is that although DOM4J has paid the cost of more complex APIs, it provides much greater flexibility than jdom.
When adding flexibility, XPath integration, and goals for large document processing, DOM4J's goal is the same as Jdom: ease of use and intuitive operation for Java developers. It is also dedicated to becoming a more complete solution than jdom, achieving the goal of essentially addressing all java/xml issues. When this goal is completed, it is less stressed than jdom to prevent improper application behavior.
Dom4j is a very, very good Java XML API with excellent performance, powerful features and extreme ease of use, and it is also an open-source software. Now you can see that more and more Java software is using dom4j to read and write XML, and it is particularly worth mentioning that even Sun's JAXM is using DOM4J.
2. Compare
1 dom4j performance is the best, even the sun Jaxm is also using DOM4J. Many open source projects currently use DOM4J, such as the famous hibernate also use dom4j to read XML configuration files. If portability is not considered, then use DOM4J.
2) Jdom and Dom perform poorly during performance testing, and memory overflows when testing 10M documents. It is also worth considering using DOM and jdom in small document situations. While Jdom developers have indicated that they expect to focus on performance issues before the formal release, it does not have a merit to recommend from a performance standpoint. In addition, Dom is still a very good choice. DOM implementations are widely used in a variety of programming languages. It is also the basis for many other XML-related standards because it is officially recommended by the Consortium (as opposed to a non-standard Java model), so it may be needed in some types of projects (such as using DOM in JavaScript).
3 sax behaves better, depending on its specific parsing mode-event-driven. A sax detects the incoming XML stream, but it is not loaded into memory (of course, when the XML stream is read, some of the documents are temporarily hidden in memory).
3. The basic usage of four kinds of XML operation methods
XML file:
A1234
xx xx road x section xx, xx County, Sichuan province
B1234
xx Xiang xx village xx Group, xx City, Sichuan province
1) DOM
Import java.io.*;
Import java.util.*;
Import org.w3c.dom.*;
Import javax.xml.parsers.*;
public class myxmlreader{
public static void Main (String arge[]) {
Long lasting =system.currenttimemillis ();
try{
File F=new file ("Data_10k.xml");
Documentbuilderfactory factory=documentbuilderfactory.newinstance ();
Documentbuilder Builder=factory.newdocumentbuilder ();
Document doc = Builder.parse (f);
NodeList nl = doc.getelementsbytagname ("VALUE");
for (int i=0;i System.out.print ("License plate number:" + doc.getelementsbytagname ("NO"). Item (i). Getfirstchild (). Getnodevalue ());
System.out.println ("Owner address:" + doc.getelementsbytagname ("ADDR"). Item (i)-getfirstchild (). Getnodevalue ());
}
}catch (Exception e) {
E.printstacktrace ();
}
2) SAX
Import org.xml.sax.*;
Import org.xml.sax.helpers.*;
Import javax.xml.parsers.*;
public class Myxmlreader extends DefaultHandler {
Java.util.Stack tags = new java.util.Stack ();
Public Myxmlreader () {
Super ();
}
public static void Main (String args[]) {
Long lasting = System.currenttimemillis ();
try {
SAXParserFactory SF = Saxparserfactory.newinstance ();
SAXParser sp = Sf.newsaxparser ();
Myxmlreader reader = new Myxmlreader ();
Sp.parse (New InputSource ("Data_10k.xml"), reader);
catch (Exception e) {
E.printstacktrace ();
}
System.out.println ("Run Time:" + (System.currenttimemillis ()-lasting) + "milliseconds");}
public void characters (char ch[], int start, int length) throws Saxexception {
String tag = (string) tags.peek ();
if (Tag.equals ("NO")) {
System.out.print ("License plate number:" + New String (CH, start, length));
}
if (Tag.equals ("ADDR")) {
SYSTEM.OUT.PRINTLN ("Address:" + New String (CH, start, length));
}
}
public void Startelement (String uri,string localname,string qname,attributes attrs) {
Tags.push (qName);}
}
3) JDOM
Import java.io.*;
Import java.util.*;
Import org.jdom.*;
Import org.jdom.input.*;
public class Myxmlreader {
public static void Main (String arge[]) {
Long lasting = System.currenttimemillis ();
try {
Saxbuilder builder = new Saxbuilder ();
Document doc = builder.build (new File ("Data_10k.xml"));
Element foo = doc.getrootelement ();
List Allchildren = Foo.getchildren ();
for (int i=0;i System.out.print ("License plate Number:" + (Element) allchildren.get (i)). Getchild ("NO"). GetText ());
System.out.println ("Owner's Address:" + ((Element) allchildren.get (i)). Getchild ("ADDR"). GetText ());
}
catch (Exception e) {
E.printstacktrace ();
}
}
4) dom4j
Import java.io.*;
Import java.util.*;
Import org.dom4j.*;
Import org.dom4j.io.*;
public class Myxmlreader {
public static void Main (String arge[]) {
Long lasting = System.currenttimemillis ();
try {
File F = new file ("Data_10k.xml");
Saxreader reader = new Saxreader ();
Document doc = Reader.read (f);
Element root = Doc.getrootelement ();
Element foo;
for (Iterator i = root.elementiterator ("VALUE"); I.hasnext ();) {
Foo = (Element) i.next ();
System.out.print ("License plate number:" + foo.elementtext ("NO"));
System.out.println ("Owner address:" + foo.elementtext ("ADDR"));
}
catch (Exception e) {
E.printstacktrace ();
}
}