使用DefaultHandler2 进行 SAX解析 出错

因为我是第一次使用DefaultHandler2这个类 sax解析带有CDATA标签的xml文件,
还不太熟悉,不知道我这样用对不对。
xml文件内容如下:图片说明
我只需要得到 url 标签下 encode、decode、lrcid这三个标签里面的内容。
下面是Java代码
public class MyDefaultHandler2 extends DefaultHandler2{

String currentElement=null;
int flag=0;
String cData;
int count=0;

@Override
public void endCDATA() throws SAXException {
    // TODO Auto-generated method stub
    super.endCDATA();
}

@Override
public void characters(char[] ch, int start, int length)
        throws SAXException {
    // TODO Auto-generated method stub
    count++;
    System.out.println("xiaoqiang:"+count);
    if(flag==1&&currentElement.equals("encode")){
        cData=new String(ch,start,length);
        System.out.println("xiaoqiang:"+cData);
    }else if(flag==1&&currentElement.equals("decode")){
        cData=new String(ch,start,length);
        System.out.println("xiaoqiang:"+cData);
    }else if (flag==1&&currentElement.equals("lrcid")) {
        String thedata=new String(ch,start,length);
        System.out.println("xiaoqiang:"+thedata);
    }
    super.characters(ch, start, length);
}

@Override
public void endDocument() throws SAXException {
    // TODO Auto-generated method stub
    super.endDocument();
}

@Override
public void endElement(String uri, String localName, String qName)
        throws SAXException {
    // TODO Auto-generated method stub
    if(localName.equals("url")){
        flag=0;
    }else {
        currentElement=null;
    }
    super.endElement(uri, localName, qName);
}

@Override
public void startDocument() throws SAXException {
    // TODO Auto-generated method stub
    super.startDocument();  
}

@Override
public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException {
    // TODO Auto-generated method stub
    if(localName.equals("url")){
        flag=1;
    }else if(localName.equals("encode")){
        currentElement="encode";
        startCDATA();
    }else if(localName.equals("decode")){
        currentElement="decode";
        startCDATA();
    }else if(localName.equals("lrcid")){
        currentElement="lrcid";
    }
    super.startElement(uri, localName, qName, attributes);
}

@Override
public void startCDATA() throws SAXException {
    // TODO Auto-generated method stub
    cData=null;
    super.startCDATA();
}

}

最后是loagCat的信息:
图片说明
我在每一次触发characters方法的时候记一次数,可以看到是第四次的时候出问题的。而且 encode 和 decode 标签里面的内容也成功获取,而 lrcid 标签里的内容则没有获取。那么应该是解析到 lrcid 标签的时候出了错误。
想请问如何解决这个问题,为什么会出错?

是我太蠢了,以前我都是用整数标记标签。这次用String currentElement标记当前标签,当不是我需要的标签时,就设为null。这样就抛出了NullPointerException异常。
当currentElement为空时拿它去与另外一个String值比较,这是错误的。所以应该String currentElement=“”;这样就不会抛异常。

http://blog.csdn.net/like7xiaoben/article/details/7086159