我正在使用SAX解析器(在android上)从WebService解析xml文件。在某些元素上,CDATA被截断并且不完整,例如, XML文件包含
之类的数据 <name><![CDATA[Gölsder und Ginck GmbH]]></name>
并在使用
解析xml文件之后public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
String text = new String(ch, start, length);
该文字仅包含“GölsderundGin”(前15个字符)。我用eclipse调试它,我发现整个字符串不包含在方法的“char [] ch”参数中。所以解析本身似乎有错误
答案 0 :(得分: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
。
总之,您需要在接收新字符时连接成员变量。
答案 1 :(得分: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);
}
}