2010-08-03 73 views
3

我正在使用SAX解析器(在android上)解析來自WebService的xml文件。在某些元素上,CDATA被截斷並且不完整,例如在XML文件中包含類似CDATA XML在解析時被截斷

<name><![CDATA[Gölsder und Ginck GmbH]]></name> 

public void characters(char[] ch, int start, int length) 
    throws SAXException { 
    super.characters(ch, start, length); 
    String text = new String(ch, start, length); 

文本只包含 「GölsderUND晶晶」(前15個字符)解析XML文件後的數據。我用eclipse調試它,我發現整個字符串不包含在方法的「char [] ch」參數中。所以解析本身似乎有錯誤

+0

FYI後四周,VTD-XML將不會有這個問題 – 2011-01-18 22:12:34

回答

3

我也有這個問題。問題是可以在同一個元素上多次調用characters()方法。在你的情況,如果你要這樣寫:

public void characters(char[] ch, int start, int length) 
    throws SAXException { 
    super.characters(ch, start, length); 
    String text = new String(ch, start, length); 
    Log.d("XMLTEST", text); 
} 

你可能會得到兩個日誌消息,一個Gölsder und Gin和一個ck GmbH

總之,您需要有接收新字符時連接的成員變量。

+0

我有同樣的問題,並最終拼接它的怪異雖然它只是偶爾分割字符串。 – Rebzie 2015-05-28 07:05:18

0

這是我的工作,閱讀Felix的後

private String text; 

@Override 
public void endElement(java.lang.String uri, 
         java.lang.String localName, 
         java.lang.String qName) 
     throws SAXException { 
     text = null; 
} 

@Override 
public void characters(char[] ch, int start, int length) 
     throws SAXException { 
    super.characters(ch, start, length); 
    if(text != null){ 
     text += String.copyValueOf(ch, start, length); 
    } else { 
     text = String.copyValueOf(ch, start, length); 
    } 
}