1. 程式人生 > >android SAX解析的characters方法被多次呼叫

android SAX解析的characters方法被多次呼叫

android SAX解析,為什麼總是對一個tag執行三次 character()方法

原因是xml檔案中含有\n 和 \t ,解析完想解析的內容之後,後面緊隨的\n 和換行之後縮排帶來的\t 同樣會執行characters方法。

解決辦法: String.replace("\n",""); String.replace("\t","");

以為這樣就可以了,但是還是不行!!!replaceAll也不行!

最終我的解決辦法是去xml檔案把\n 和\t 替換掉,沒有任何多餘字元,就通過了。

但是參照網上內容,有些特殊符號,如&可能也會呼叫新的characters方法,最完美的解決方案是用StringBuilder,解析的時候去呼叫sb.append(*,*,*);然後在endelement方法中把sb強制轉換為String,解決了當前問題。

續:

剛才又找到一個方法,呼叫一個函式

public static String getStringNoBlank(String str) {    
        if(str!=null && !"".equals(str)) {    
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");    
            Matcher m = p.matcher(str);    
            String strNoBlank = m.replaceAll("");    
            return strNoBlank;    
        }else {    
            return str;    
        }         
    }   

通過正則表示式把空白的空格符,換行符全部去掉,我沒有在SAX那個程式中執行,但是在System.out中確實把xml檔案的換行神馬的都去掉了。