xstream初读

  xstream 入口类:com.thoughtworks.xstream.XStream

  主要支持的解析方式:jdom,xmlpull,dom4j,jdom.

  默认的解析方式:xmlpull 包解析(该包的解析速度据说超过sax解析,J2ME解析xml会用到该包)

  刚刚查了下资料,发现原来除了熟悉的Dom(基于DOM树)解析,Sax(基于事件)解析外,前两者都需要一次性析,        还有一种就是XPP解析(XPP解析支持断点解析)。

  xstream可以解析私有的属性,不知道这点是怎么做到的?有待研读。。。。

  刚才换了一个xom,dom4j的解析方式,发现解析不出东西,应该和xmlpull的解析有关。

  在xmlpull解析中,一般使用kxml.jar,该包包含了xmlpull并对它进行了扩展,但xstream种用的是xpp3.jar。如果单单使用xmlpull.jar会报XmlPullParserException异常。

 

kxml解析的基本实现 :

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
public class XmlPullTest
{
    private static String xml = "<Student><name>张三</name><age>23</age></Student>";
    
    public static void main(String args[])
        
        throws XmlPullParserException, IOException
    {
        
        ByteArrayInputStream bin = new ByteArrayInputStream(xml.getBytes());
        InputStreamReader in = new InputStreamReader(bin);
        XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
        parser.setInput(in);
        
        int eventType = parser.getEventType();
        // 结束文档解析
        while (eventType != XmlPullParser.END_DOCUMENT)
        {
            if (eventType == XmlPullParser.START_DOCUMENT)
            {
                System.out.println("Start document:");
            }
            else if (eventType == XmlPullParser.END_DOCUMENT)
            {
                System.out.println("End document");
            }
            else if (eventType == XmlPullParser.START_TAG)
            {
                System.out.println(" start tag " + parser.getName());
                System.out.println(" Start Count: " + parser.getAttributeCount());
                int size = parser.getAttributeCount();
                for (int i = 0; i < size; i++)
                {
                    System.out.println(" attrName " + parser.getAttributeName(i));
                    System.out.println(" attrValue " + parser.getAttributeValue(i));
                }
                
            }
            else if (eventType == XmlPullParser.END_TAG)
            {
                System.out.println(" end tag " + parser.getName());
            }
            else if (eventType == XmlPullParser.TEXT)
            {
                System.out.println(" test: " + parser.getText());
            }
            eventType = parser.next();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值