In ordinary work, it is inevitable that XML is encountered as a data storage format. In the face of current types of solutions, what is best for us? In this article, I do an incomplete evaluation of these four mainstream programs, only for the traversal of XML, because the traversal XML is the most used in work (at least I think). Prepare test environment: AMD poison dragon 1.4G OC 1.5G, 256M DDR333, Windows2000 Server SP4, Sun JDK 1.4.1 Eclipse 2.1 resin 2.1.8, test in Debug mode. The XML file format is as follows: XML Version = "1.0" encoding = "GB2312"?>
Bean file: package com.test; 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 The DOM parser converts the XML document into a tree containing its content, and can traverse the tree. The advantage of using the DOM parsing model is that the programming is easy, and the developer only needs to call the manifold of the build tree, and then use the Navigation API to access the tree node required to complete the task. Elements in the tree can be easily added and modified. However, due to the use of the DOM parser, the entire XML document is required, so the requirements for performance and memory are relatively high, especially when they encounter a large XML file. Due to its traversal capabilities, DOM parsers are often used in XML documents that require frequent changes. The SAX parser uses an event-based model. It can trigger a series of events when parsing the XML document. When a given TAG is found, it can activate a callback method, telling the label that the method has been found. SAX's requirements for memory are usually relatively low because it allows developers to determine the TAG to be processed. In particular, when the developer only needs to process some of the data contained in the document, SAX has a better manifestation. However, encoding work is more difficult to use the SAX parser, and it is difficult to access multiple different data in the same document. BEAN file: package com.test; 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 ("DATA_10K.XML"), Reader;} catch (Exception E) {E.PrintStackTrace ();} system. Out.println ("Run Time:" (System.currentTimeMillis () - Lasting) "Mix");} 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));} f (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);}} 10k consumption time: 110 47 109 78 100K time consumption: 344 406 375 422 1000k consumption time: 3234 3281 3688 331210000K time consumption time: 32578 34313 31797 31890 30328 Then the purpose of jdom http://www.jdom.org/ JDOM is to become a Java-specific document model, which simplifies interaction with XML and faster than using DOM. Since it is the first Java specific model, JDOM has been vigorously promoted and promoted. It is considering that it is ultimately used as "Java Standard Extension" through "Java Specification Request JSR-102". JDM development has begun from early 2000. There are two main aspects of JDOM and DOM. First, JDOM only uses a specific class without using an interface. This simplifies API in some respects, but also limits flexibility. Second, the API uses a Collections class, simplifies the use of Java developers that are familiar with these classes. The JDOM document declares that its purpose is to "use 20% (or fewer) energy to solve 80% (or more) Java / XML issues" (assuming 20% depending on the learning curve). Jdom is of course useful for most Java / XML applications, and most developers have found that API is much easier to understand than DOM. JDOM also includes a considerable extensive check of program behavior to prevent users from doing anything in XML. However, it still needs you to fully understand XML to do some work beyond basic work (or even understand in some cases). This may be more meaningful than learning the DOM or JDOM interface. JDOM does not contain a parser. It usually uses the SAX2 parser to parse and verify the input XML document (although it can also represent the previously constructed DOM as input). It contains some converters to indicate the JDOM to the SAX2 event stream, a DOM model, or an XML text document. JDOM is an open source released under the Apache license variant. Bean file: package com.test; 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 When adding flexibility, XPath integration, and targets for large documents, DOM4J's goals are the same as JDOM: for easy-to-use and intuitive operations of Java developers. It is also committed to becoming a more complete solution than JDOM, achieving the goals of all Java / XML issues in nature. When this goal is completed, it is more emphasized than JDOM to prevent incorrect application behavior. DOM4J is a very very excellent Java XML API with features excellent performance, powerful and extremely easy to 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, especially worth mentioning that Sun's JAXM is also using DOM4J. Bean file: package com.test; 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 ();} System System .out.println ("Runtime:" (System.currentTimeMillis () - Lasting) "Mixi");}} 10k Time: 109 78 109 31 100k time-consuming: 297 359 172 312 1000k time-consuming: 2281 2359 2344 246910000k elapsed time: 20938 19922 20031 21078 THE END JDOM DOM and poor performance when the performance test, the test memory overflow 10M document. In the case of small documents, it is also worth considering using DOM and JDOM. Although JDOM developers have explained that they expect to focus on performance issues before formal release, it is indeed worth recommending.