java中XML格式的字符串4读取方式的简单比较
2009-09-10 16:28
197 查看
最近工作中遇到一个有关XML格式的字符串的解析问题,在网上收集了些资料,总共有四种方式如下,并对所用是进行了简单比较.可能如我字符串的长短,和负责程度有关系,结果不一定准确 仅供参考! 下面看代码:
1.java自带的DOM解析.
以下的三种方法mian方法里面都是一样的解析那段字符串,记录用时,就不在贴出, 只贴出所用的解析部分
2.java自带的SAX解析.
3.DOM4J解析,需要下载对应的jar包
4.JDOM解析,需要下载对应的jar包
以上是4种XML解析的简单对比,如果要更复杂的 也只是多几层遍历,希望对大家有帮助.
1.java自带的DOM解析.
import java.io.StringReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; public class ReaderXmlForDOM { public static void main(String args[]) { String text ="<XML><A>123</A><B>whl123</B><C>亮亮</C><D>1</D><E>1</E><F>165074</F><G>贫穷</G><H>1698.0</H><I>初级士官</I><J>湖南</J><K>常德</K><L>1</L></XML>" long begin = System.currentTimeMillis(); parse( text ); long after = System.currentTimeMillis(); System.out.println("DOM用时"+(after-begin)+"毫秒"); } public static void parse(String protocolXML) { try { DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder .parse(new InputSource(new StringReader(protocolXML))); Element root = doc.getDocumentElement(); NodeList books = root.getChildNodes(); if (books != null) { for (int i = 0; i < books.getLength(); i++) { Node book = books.item(i); System.out.println("节点=" + book.getNodeName() + "/ttext=" + book.getFirstChild().getNodeValue()); } } } catch (Exception e) { e.printStackTrace(); } } }我当时dom解析用时是个不稳定的值在62-78毫秒之间.
以下的三种方法mian方法里面都是一样的解析那段字符串,记录用时,就不在贴出, 只贴出所用的解析部分
2.java自带的SAX解析.
import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class ReaderXmlForSAX { public static void parse(String protocolXML) { try { SAXParserFactory saxfac = SAXParserFactory.newInstance(); SAXParser saxparser = saxfac.newSAXParser(); TestSAX tsax = new TestSAX(); saxparser.parse(new InputSource(new StringReader(protocolXML)),tsax); } catch (Exception e) { e.printStackTrace(); } } } class TestSAX extends DefaultHandler{ private StringBuffer buf; private String str; public TestSAX(){ super(); } public void startDocument() throws SAXException{ buf=new StringBuffer(); System.out.println("*******开始解析XML*******"); } public void endDocument() throws SAXException{ System.out.println("*******XML解析结束*******"); } public void endElement(String namespaceURI,String localName,String fullName )throws SAXException{ str = buf.toString(); System.out.println("节点="+fullName+"/tvalue="+buf+" 长度="+buf.length()); System.out.println(); buf.delete(0,buf.length()); } public void characters( char[] chars, int start, int length )throws SAXException{ //将元素内容累加到StringBuffer中 buf.append(chars,start,length); } }SAX用时是62毫秒,最快的.但是需要多写一个类
3.DOM4J解析,需要下载对应的jar包
import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class ReaderXmlForDOM4J { //DOM4j解析XML public static void parse(String protocolXML) { try { Document doc=(Document)DocumentHelper.parseText(protocolXML); Element books = doc.getRootElement(); System.out.println("根节点"+books.getName()); // Iterator users_subElements = books.elementIterator("UID");//指定获取那个元素 Iterator Elements = books.elementIterator(); while(Elements.hasNext()){ Element user = (Element)Elements.next(); System.out.println("节点"+user.getName()+"/ttext="+user.getText()); List subElements = user.elements(); // List user_subElements = user.elements("username");指定获取那个元素 // System.out.println("size=="+subElements.size()); // for( int i=0;i<subElements.size();i++){ // Element ele = (Element)subElements.get(i); // System.out.print(ele.getName()+" : "+ele.getText()+" "); // } System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } }DOM4J的用时为140毫秒,慢 并且还需要单独的jar包
4.JDOM解析,需要下载对应的jar包
import java.io.StringReader; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.xml.sax.InputSource; public class ReaderXmlForJDOM { public static void parse(String protocolXML) { SAXBuilder builder=new SAXBuilder(false); try { Document doc = builder.build(new InputSource(new StringReader(protocolXML))); Element eles = doc.getRootElement(); // 得到根元素 System.out.println("根节点"+eles.getName()); List<Element> list = eles.getChildren(); // 得到元素的集合 //List studentList = students.getChildren("student"); // 得到指定元素(节点)的集合 if( list!=null){ for (int i = 0; i < list.size(); i++) { Element book = (Element)list.get(i); System.out.println("节点=" + book.getName() + "/ttext=" + book.getValue()); } } } catch (Exception e) { e.printStackTrace(); } } }JDOM的用时为125毫秒,比较慢 并且还需要单独的jar包
以上是4种XML解析的简单对比,如果要更复杂的 也只是多几层遍历,希望对大家有帮助.
相关文章推荐
- java中XML格式的字符串4读取方式的简单比较
- java中XML格式的字符串4读取方式的简单比较
- Java中XML格式的字符串4读取方式的简单比较
- java中XML格式的字符串4读取方式
- Java 5种字符串拼接方式性能比较。
- Java 5种字符串拼接方式性能比较
- java中的简单的字符串大小比较方法——compareto方法的详细介绍
- Java 5种字符串拼接方式性能比较。
- Java 5种字符串拼接方式性能比较
- Java 5种字符串拼接方式性能比较
- Java字符串拼接方式性能比较
- 【转】Java 5种字符串拼接方式性能比较。
- Java 5种字符串拼接方式性能比较。
- list 遍历方式(包括java8 Lambda)的比较和简单分析
- Java 5种字符串拼接方式性能比较。
- Java 5种字符串拼接方式性能比较
- Java 5种字符串拼接方式性能比较。
- Java 5种字符串拼接方式性能比较。
- Java 字符串拼接方式性能比较
- java简单的字符串大小比较——compareTo()方法