每秒接受1000条XML格式的消息,消息是最简单的格式,并不复杂,我要将每条消息解析出来,并插入数据库,我用的DOM方法速度根本来不及,请问高手用什么方法解析更快. 格式就是这个样子的: 
        <雇员>   
                    <姓名>   王玉强   </姓名>   
                    <年龄>   25岁   </年龄>   
                    <工资>   3190   </工资>   
        </雇员>   

解决方案 »

  1.   

    String xmls= "<OSP_COSP 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;
                }
      

  2.   

    一般sax的解析函数(比如startElement)的参数是这样的:
    String uri, String localName, String qName, Attributes atts每碰到一个Element,就会调用startElement,然后就可以取值,也可以去属性值
    SAXParserFactory sf = SAXParserFactory.newInstance();
    SAXParser sp = sf.newSAXParser();
    MyXMLReader reader = new MyXMLReader();
    sp.parse(new InputSource("data_10k.xml"), reader); MyXMLReader里面有startElement,startDocument等函数不知道你是怎么写的?