【问题标题】:CDATA XML is truncated while parsingCDATA XML 在解析时被截断
【发布时间】:2023-04-04 07:01:01
【问题描述】:

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

【问题讨论】:

  • 仅供参考,VTD-XML 不会有这个问题

标签: java android xml sax cdata


【解决方案1】:

我也遇到过这个问题。问题是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。

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

【讨论】:

  • 我遇到了同样的问题,最终将它连接起来很奇怪,因为它有时会拆分字符串。
【解决方案2】:

这是我在阅读 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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    相关资源
    最近更新 更多