You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio升级后XmlPullParser读取SQL语句截断问题求助

XmlPullParser读取含单引号的XML文本被截断的解决方案

你遇到的问题本质上不是单引号本身的问题,而是你的leerTexto方法没有正确处理XmlPullParser的文本分段行为——升级Android Studio后,解析器可能会将较长或包含特殊字符的文本拆分成多个TEXT事件,而你的原方法只读取了第一个片段就返回,导致内容被截断。

问题根源分析

原leerTexto方法只调用了一次parser.next(),如果解析器将文本拆分成多个TEXT节点(比如新解析器对长文本的处理逻辑变化,或单引号触发了分段判定),就只能获取到第一部分内容,剩下的会被漏掉。

而且你的XML本身是合法的:XML文本内容中的单引号不需要转义(只有当属性值用单引号包裹时,才需要用'转义),所以不需要修改XML里的单引号,也不用换成双引号(这会导致SQL语法错误,因为SQL字符串必须用单引号包裹)。

修复后的代码

修改leerTexto方法,循环读取所有TEXT片段直到遇到当前标签的结束标签,用StringBuilder拼接完整内容:

private String leerTexto(XmlPullParser parser) {
    StringBuilder texto = new StringBuilder();
    int state;
    try {
        state = parser.next();
        // 循环读取直到当前标签的结束标签
        while (state != XmlPullParser.END_TAG) {
            if (state == XmlPullParser.TEXT) {
                texto.append(parser.getText());
            }
            state = parser.next();
        }
    } catch (XmlPullParserException | IOException e) {
        e.printStackTrace();
    }
    return texto.toString();
}

修复逻辑说明

  1. 使用StringBuilder替代String,避免多次字符串拼接的性能损耗,同时方便累积内容
  2. 循环调用parser.next(),直到遇到当前标签的END_TAG,确保不会漏掉任何分段的文本
  3. 每次遇到TEXT事件时,就将内容追加到StringBuilder中,最终拼接成完整的SQL语句

这个修改后,不管XmlPullParser如何分段处理文本,都能完整获取<datos>和<ingredientes>标签内的全部SQL语句,同时保留原有的单引号,不会导致SQLite插入时的语法错误。

内容的提问来源于stack exchange,提问作者Jordi Alcaraz Gimenez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:50:38