XPP3-一个非常快的XML解析器

来源:互联网 发布:表白网站制作软件 编辑:程序博客网 时间:2024/06/11 09:51
1、XPP3 也叫 MXP1

XPP —— XML Pull Parser,XPP3是一个非常快的XML解析器,是第三版的XPP。

XPP2是XPP的第二版。
XPP3是XPP2的继承者,实现了 http://www.xmlpull.org 定义的 XmlPull API 。
XPP3只能用于解析XML,不支持节点树的增加操作。
看到有人做的对比测试,XPP3 比 DOM4J 快6倍,也就是使用了1/6时间。

XPP3使用的是 Apache 1.1 variant License 协议。

http://www.extreme.indiana.edu/xgws/xsoap/xpp/

http://www.extreme.indiana.edu/xgws/xsoap/xpp/mxp1/index.html

http://mvnrepository.com/artifact/xpp3/xpp3

http://www.xmlpull.org/

使用举例:http://www.xmlpull.org/v1/download/unpacked/doc/quick_intro.html


MyXmlPull.java

============

[java] view plaincopy
  1. import java.io.FileReader;  
  2. import java.io.IOException;  
  3. import java.io.StringReader;  
  4.   
  5. import org.xmlpull.v1.XmlPullParser;  
  6. import org.xmlpull.v1.XmlPullParserException;  
  7. import org.xmlpull.v1.XmlPullParserFactory;  
  8.   
  9. /** 
  10.  * An example of an application that uses XMLPULL V1 API. 
  11.  * 
  12.  * @author <a href="http://www.extreme.indiana.edu/~aslom/">Aleksander Slominski</a> 
  13.  */  
  14. public class MyXmlPullApp  
  15. {  
  16.   
  17.     public final static String SAMPLE_XML =  
  18.         "<?xml version=\"1.0\"?>\n"+  
  19.         "\n"+  
  20.         "<poem xmlns=\"http://www.megginson.com/ns/exp/poetry\">\n"+  
  21.         "<title>Roses are Red</title>\n"+  
  22.         "<l>Roses are red,</l>\n"+  
  23.         "<l>Violets are blue;</l>\n"+  
  24.         "<l>Sugar is sweet,</l>\n"+  
  25.         "<l>And I love you.</l>\n"+  
  26.         "</poem>";  
  27.   
  28.     public static void main (String args[])  
  29.         throws XmlPullParserException, IOException  
  30.     {  
  31.         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();  
  32.         factory.setNamespaceAware(true);  
  33.         XmlPullParser xpp = factory.newPullParser();  
  34.         System.out.println("parser implementation class is "+xpp.getClass());  
  35.   
  36.         MyXmlPullApp app = new MyXmlPullApp();  
  37.   
  38.         if(args.length == 0) {  
  39.             System.out.println("Parsing simple sample XML");//:\n"+ SAMPLE_XML);  
  40.             xpp.setInput( new StringReader( SAMPLE_XML ) );  
  41.             app.processDocument(xpp);  
  42.         } else {  
  43.             for (int i = 0; i < args.length; i++) {  
  44.                 System.out.println("Parsing file: "+args[i]);  
  45.                 xpp.setInput ( new FileReader ( args [i] ) );  
  46.                 app.processDocument(xpp);  
  47.             }  
  48.         }  
  49.     }  
  50.   
  51.   
  52.     public void processDocument(XmlPullParser xpp)  
  53.         throws XmlPullParserException, IOException  
  54.     {  
  55.         int eventType = xpp.getEventType();  
  56.         do {  
  57.             if(eventType == xpp.START_DOCUMENT) {  
  58.                 System.out.println("Start document");  
  59.             } else if(eventType == xpp.END_DOCUMENT) {  
  60.                 System.out.println("End document");  
  61.             } else if(eventType == xpp.START_TAG) {  
  62.                 processStartElement(xpp);  
  63.             } else if(eventType == xpp.END_TAG) {  
  64.                 processEndElement(xpp);  
  65.             } else if(eventType == xpp.TEXT) {  
  66.                 processText(xpp);  
  67.             }  
  68.             eventType = xpp.next();  
  69.         } while (eventType != xpp.END_DOCUMENT);  
  70.     }  
  71.   
  72.   
  73.     public void processStartElement (XmlPullParser xpp)  
  74.     {  
  75.         String name = xpp.getName();  
  76.         String uri = xpp.getNamespace();  
  77.         if ("".equals (uri)) {  
  78.             System.out.println("Start element: " + name);  
  79.         } else {  
  80.             System.out.println("Start element: {" + uri + "}" + name);  
  81.         }  
  82.     }  
  83.   
  84.   
  85.     public void processEndElement (XmlPullParser xpp)  
  86.     {  
  87.         String name = xpp.getName();  
  88.         String uri = xpp.getNamespace();  
  89.         if ("".equals (uri))  
  90.             System.out.println("End element: " + name);  
  91.         else  
  92.             System.out.println("End element:   {" + uri + "}" + name);  
  93.     }  
  94.   
  95.     int holderForStartAndLength[] = new int[2];  
  96.   
  97.     public void processText (XmlPullParser xpp) throws XmlPullParserException  
  98.     {  
  99.         char ch[] = xpp.getTextCharacters(holderForStartAndLength);  
  100.         int start = holderForStartAndLength[0];  
  101.         int length = holderForStartAndLength[1];  
  102.         System.out.print("Characters:    \"");  
  103.         for (int i = start; i < start + length; i++) {  
  104.             switch (ch[i]) {  
  105.                 case '\\':  
  106.                     System.out.print("\\\\");  
  107.                     break;  
  108.                 case '"':  
  109.                     System.out.print("\\\"");  
  110.                     break;  
  111.                 case '\n':  
  112.                     System.out.print("\\n");  
  113.                     break;  
  114.                 case '\r':  
  115.                     System.out.print("\\r");  
  116.                     break;  
  117.                 case '\t':  
  118.                     System.out.print("\\t");  
  119.                     break;  
  120.                 default:  
  121.                     System.out.print(ch[i]);  
  122.                     break;  
  123.             }  
  124.         }  
  125.         System.out.print("\"\n");  
  126.     }  
  127. }  

0 0
原创粉丝点击