因为我是第一次使用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&¤tElement.equals("encode")){
cData=new String(ch,start,length);
System.out.println("xiaoqiang:"+cData);
}else if(flag==1&¤tElement.equals("decode")){
cData=new String(ch,start,length);
System.out.println("xiaoqiang:"+cData);
}else if (flag==1&¤tElement.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 标签的时候出了错误。
想请问如何解决这个问题,为什么会出错?