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

alfresco用到了大量的第三方的工具或者项目。本文列举并介绍这些项目和工具,以便在使用和分析alfresco的时候能够有一些帮助。


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/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 plain copy
  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. }  


java源文件下载地址: http://download.csdn.net/detail/teamlet/4399658


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android Studio 中,XML 解析通常用于解析布局文件和资源文件。以下是一些常用的 XML 解析方法: 1. 使用 DOM 解析:可以将 XML 文件解析为一棵树形结构,然后通过遍历树的节点来获取所需的数据。 2. 使用 SAX 解析:可以将 XML 文件解析为一系列事件,然后通过监听这些事件来获取所需的数据。 3. 使用 XmlPullParser 解析:可以逐行解析 XML 文件,然后通过判断标签类型和属性值来获取所需的数据。 在 Android Studio 中,通常使用 XmlPullParser 来解析布局文件和资源文件,因为它具有轻量级、速度和易于使用的优点。要使用 XmlPullParser,可以使用以下代码: ```java XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(new StringReader(xmlString)); int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if(eventType == XmlPullParser.START_TAG) { // 处理开始标签 } else if(eventType == XmlPullParser.END_TAG) { // 处理结束标签 } else if(eventType == XmlPullParser.TEXT) { // 处理标签文本 } eventType = xpp.next(); } ``` 其中,xmlString 是要解析的 XML 字符串,eventType 表示当前处理的事件类型。在处理开始标签时,可以使用 getAttribute() 方法获取标签属性值;在处理标签文本时,可以使用 getText() 方法获取文本内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值