DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J.
3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。
xml文件:
<?xml version="1.0" encoding="gbk"?> <list> <node> <name>程序猿狒狒的专栏</name> <space>http://blog.csdn.net/aoxiangzhiguanjun</space> </node> <node> <name>翱翔之冠军</name> <space>http://flydream5201314.qzone.qq.com</space> </node> <node> <name>FlyDream2014</name> <space>http://weibo.com/lzffly </space> </node> </list>
package senior; import java.io.File; import java.io.IOException; import java.util.List; import java.util.Stack; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class XMLTest extends DefaultHandler { /** * @param args */ Stack<String> tags = new Stack<String>(); public XMLTest() { super(); } public static void main(String[] args) { // TODO Auto-generated method stub XMLTest myXML = new XMLTest(); System.out.println("=====================DOM========================="); myXML.DOM(); System.out.println("=====================SAX========================="); myXML.SAX(); System.out.println("=====================JDOM========================"); myXML.JDOM(); System.out.println("=====================DOM4J======================="); myXML.DOM4J(); System.out.println("================================================="); } File f = new File("test.xml"); public void DOM() { long start = System.currentTimeMillis(); try { DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByTagName("node"); for (int i = 0; i < nl.getLength(); i++) { System.out.println("Name|" + doc.getElementsByTagName("name").item(i) .getFirstChild().getNodeValue()); System.out.println("Space|" + doc.getElementsByTagName("space").item(i) .getFirstChild().getNodeValue()); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } long end = System.currentTimeMillis(); System.out.println("dom runtime" + (end - start) + "MS"); } public void SAX() { long start = System.currentTimeMillis(); try { SAXParserFactory sf = SAXParserFactory.newInstance(); SAXParser sp = sf.newSAXParser(); XMLTest reader = new XMLTest(); sp.parse(f, reader); } catch (Exception e) { e.printStackTrace(); } System.out.println("sax runtime" + (System.currentTimeMillis() - start) + " MS"); } public void startElement(String uri, String localName, String qName, Attributes attrs) { tags.push(qName); } public void characters(char ch[], int start, int length) throws SAXException { String tag = (String) tags.peek(); if (tag.equals("name")) { System.out.println("Name|" + new String(ch, start, length)); } else if (tag.equals("space")) { System.out.println("Space|" + new String(ch, start, length)); } } public void JDOM() { long start = System.currentTimeMillis(); try { SAXBuilder builder = new SAXBuilder(); org.jdom.Document doc = builder.build(f); Element foo = doc.getRootElement(); List<?> allChaildren = foo.getChildren(); for (int i = 0; i < allChaildren.size(); i++) { System.out.println("Name|" + ((Element) allChaildren.get(i)).getChild("name") .getText()); System.out.println("Space" + ((Element) allChaildren.get(i)).getChild("space") .getText()); } } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } long end = System.currentTimeMillis(); System.out.println("jdom runtime" + (end - start) + "MS"); } public void DOM4J() { long start = System.currentTimeMillis(); try { SAXReader reader = new SAXReader(); org.dom4j.Document doc = reader.read(f); org.dom4j.Element root = doc.getRootElement(); org.dom4j.Element foo; for (@SuppressWarnings("rawtypes") java.util.Iterator i = root.elementIterator("node"); i.hasNext();) { foo = (org.dom4j.Element) i.next(); System.out.println("Name|" + ((org.dom4j.Element) foo).elementText("name")); System.out.println("Space|" + ((org.dom4j.Element) foo).elementText("space")); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } long end = System.currentTimeMillis(); System.out.println("dom4j runtime" + (end - start) + "MS"); } }
运行结果: