1

SaxParser を使用して、Android アプリケーションでほぼ 90000 文字の xml 応答を解析しています。xml は次のようになります。

 <Registration>
     <Client>   
         <Name>John</Name>
         <ID>1</ID>
         <Date>2013:08:22T03:43:44</Date>
     </Client>  
     <Client>   
         <Name>James</Name>
         <ID>2</ID>
         <Date>2013:08:23T16:28:00</Date>
     </Client>
     <Client>   
         <Name>Eric</Name>
         <ID>3</ID>
         <Date>2013:08:23T19:04:15</Date>
     </Client>

     ..... 
 </Registration>

パーサーが Date タグの一部の文字を見逃すことがあります。2013:08:23T19:04:15 を返す代わりに、2013:08:23T を返します。次のコード行を使用して、応答 xml 文字列からすべての空白をスキップしようとしました。

 responseStr = responseStr.replaceAll("\\s","");

しかし、次の例外が発生します。

 Parsing exception: org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 16: not well-formed (invalid token)

以下は、解析に使用しているコードです。

 try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();

            DefaultHandler handler = new DefaultHandler() {
                public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {
                    tagName = qName;
                }

                public void endElement(String uri, String localName, String qName) throws SAXException {

                }

                public void characters(char ch[], int start, int length) throws SAXException {
                    if(tagName.equals("Name")){
                        obj = new RegisteredUser();
                        String str = new String(ch, start, length);
                        obj.setName(str);
                    }else if(tagName.equals("ID")){
                        String str = new String(ch, start, length);
                        obj.setId(str);
                    }else if(tagName.equals("Date")){
                        String str = new String(ch, start, length);
                        obj.setDate(str);

                        users.add(obj);
                    }
                }

                public void startDocument() throws SAXException {
                    System.out.println("document started");
                }

                public void endDocument() throws SAXException {
                    System.out.println("document ended");
                }
            };

            saxParser.parse(new InputSource(new StringReader(resp)), handler);

        }catch(Exception e){
            System.out.println("Parsing exception: "+e);
            System.out.println("exception");

        }

パーサーがタグから文字をスキップする理由と、この問題を解決するにはどうすればよいですか。前もって感謝します。

4

3 に答える 3

2

他の前述のcharactersメソッドは複数回呼び出される可能性があるため、SAX パーサーの実装次第で all が返されますcontiguous character data in a single chunk, or they may split it into several chunks。ドキュメントを見るSAX Parser characters

于 2013-08-27T08:44:52.063 に答える