2010-08-03 70 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); 
    } 
}