String xmls= "<OSP_CDR ServiceType='TBL_SMS_SENT'><MASSMSID>823633671d9d4bb2aca0eac39f5456d45</MASSMSID><GWSMSID>hhh</GWSMSID><SISMSID>82363367-1d9d-4bb2-aca0-eac39f5456d4</SISMSID><EXTCODE></EXTCODE><DESTADDR>13586800000</DESTADDR><MESSAGECONTENT>hello</MESSAGECONTENT><REQDELIVERYREPORT>1</REQDELIVERYREPORT><MSGFMT>15</MSGFMT><REQUESTTIME>2007-11-23 14:58:58</REQUESTTIME><SENTTIME>sd</SENTTIME><SENTRESULT>dsd</SENTRESULT><SMSSTATUS>-1</SMSSTATUS><STATUSTIME>2007-11-23 14:56:57</STATUSTIME><APPLICATIONID>001001</APPLICATIONID></OSP_CDR>";
上面是我要解析的XML,我是用sax解析,可是每次读第一个到第一个节点的时候,length值都是15(按字符串应该是20位),20位是分两次读取的,读到其它节点时length都与字符串值相同,这是为什么,请高手指点,急!!!!!!!!这里有部分代码,MASSMSID是第一个节点,可每次都要分两次读,最后MASSMSIDString的值就是后半部分了. 
public void characters(char[] chars, int start, int length) throws SAXException {
//将元素内容累加到StringBuffer中
        buf = new StringBuffer();       
        buf.append(chars, start, length);
        System.out.println("length:"+length);
        text = buf.toString();
            if(MASSMSID){  
             MASSMSIDString = text;              
            }
            if(GWSMSID){
                GWSMSIDString = text;
            }
            if(SISMSID){
                SISMSIDString = text;
            }
            if(EXTCODE){
                EXTCODEString = text;
            }
            if(DESTADDR){
               DESTADDRString = text;
            }
            if(MESSAGECONTENT){
                MESSAGECONTENTString = text;
            }
            if(REQDELIVERYREPORT){
                REQDELIVERYREPORTString = text;
            }

解决方案 »

  1.   

    没太看懂你的意思
    看看http://blog.163.com/yangjuqi@126/ Dom4j操作XML的文章或许对你有帮助
      

  2.   

    你在调用这个方法的时候传入的参数中的length是从哪里得来的呢?是不是你的length就传了15?
      

  3.   

    这个length不是我给的,是自动的,这是个触发事件,就第一个节点不行,后面的每个节点中的值的长度都能自动识别,就第一个节点不行,要分两次读
      

  4.   

    DOM4j太耗内存了,每秒1000条数据,一会儿就挂了