3

我正在使用 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ölsder und Gin”(前 15 个字符)。我用 eclipse 调试了它,我发现整个字符串不包含在方法的“char [] ch”参数中。所以解析本身似乎有错误

4

2 回答 2

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

总之,您需要在接收新字符时连接成员变量。

于 2010-08-03T19:17:16.907 回答
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);
    }
}
于 2015-05-28T07:09:11.513 回答