Four ways and comparisons of Java reading XML files

Source: Internet
Author: User
Tags gettext xpath

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).


Data_10k.xml

<?xml version= "1.0" encoding= "GB2312"?>
<RESULT>
	<VALUE>
		<no>a1234</no >
		<ADDR> xx town xx road x section xx, xx, Sichuan province </ADDR>
	</VALUE>
	<VALUE>
		<no>b1234 </NO>
		<ADDR> xx Xiang xx village xx Group </ADDR>
	</VALUE> </RESULT> in xx, Sichuan province

Dom4j_xml.java

Package com.ibm.xml;
Import java.io.*;
Import java.util.*;
Import org.dom4j.*;
Import org.dom4j.io.*;

public class Dom4j_xml {public
	static void Main (String arge[]) {
		Long lasting = System.currenttimemillis ();
		try {
			file F = new file ("Src/com/ibm/xml//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 ();}}}
Jdom_xml.java

Package com.ibm.xml;

Import java.io.*;
Import java.util.*;
Import org.jdom.*;
Import org.jdom.input.*;

public class Jdom_xml {public
	static void Main (String arge[]) {
		Long lasting = System.currenttimemillis ();
		try {
			Saxbuilder builder = new Saxbuilder ();
			Document doc = builder.build (new File (
					"Src/com/ibm/xml//data_10k.xml"));
			Element foo = doc.getrootelement ();
			List Allchildren = Foo.getchildren ();
			for (int i = 0; i < allchildren.size (); i++) {
				System.out.print ("License plate number:"
						+ (Element) allchildren.get (i)). get Child ("NO")
								. GetText ());
				System.out.println ("Owner's address:"
						+ ((Element) allchildren.get (i)). Getchild ("ADDR")
								. GetText ());
			}
		catch (Exception e) {
			e.printstacktrace ();}}}
Dom_xml.java
Package com.ibm.xml;

Import Java.io.File;
Import Javax.xml.parsers.DocumentBuilder;
Import javax.xml.parsers.DocumentBuilderFactory;
Import org.w3c.dom.Document;
Import org.w3c.dom.NodeList;

public class Dom_xml {public
	static void Main (String arge[]) {
		Long lasting = System.currenttimemillis ();
		try {
			file F = new file ("Src/com/ibm/xml//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 < nl.getlength (); 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 ();}}}
Sax_xml.java

Package com.ibm.xml;
Import Javax.xml.parsers.SAXParser;

Import Javax.xml.parsers.SAXParserFactory;
Import org.xml.sax.Attributes;
Import Org.xml.sax.InputSource;
Import org.xml.sax.SAXException;

Import Org.xml.sax.helpers.DefaultHandler;

	public class Sax_xml extends DefaultHandler {java.util.stack<string> tags = new java.util.stack<string> ();
	Public Sax_xml () {super ();
		public static void Main (String args[]) {Long lasting = System.currenttimemillis ();
			try {saxparserfactory SF = saxparserfactory.newinstance ();
			SAXParser sp = Sf.newsaxparser ();
			Sax_xml reader = new Sax_xml ();
		Sp.parse (New InputSource ("Src/com/ibm/xml//data_10k.xml"), reader);
		catch (Exception e) {e.printstacktrace ();
	System.out.println ("Run Time:" + (System.currenttimemillis ()-lasting) + "MS");
		public void characters (char ch[], int start, int length) throws saxexception {String tag = 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); }
}






Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.