解析时会截断CDATA XML

时间:2010-08-03 19:03:37

标签: java android xml sax cdata

我正在使用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”参数中。所以解析本身似乎有错误

2 个答案:

答案 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);
    }
}