【问题标题】:XmlPullParser:PI must not start with xml, but only on Android 2.3.3 downwardsXmlPullParser:PI不能以xml开头,只能在Android 2.3.3以下
【发布时间】:2012-11-12 00:20:53
【问题描述】:

我在 Android 3.0+ 上没有收到错误,但只有在 Android 2.2、2.3.3 上,当我尝试通过 XmlPullParser 解析一个小的 XML 文件时,应用程序因错误而中断:

org.xmlpull.v1.XmlPullParserException: PI must not start with xml 
(position:unknown @1:5 in java.io.InputStreamReader@40568770) 

错误中提到的 PI 是什么???

我发现这可能会导致 XML 文件的第一行 (<?xml version="1.0" encoding="utf-8"?>),但我没有找到在较低的 Android 版本上发生这种情况的原因。

如果这是错误的原因(XML 文件的第一行),我该如何解决?

我应该:
a) 要求 Web 服务器的管理员更改 XML?如果是,他应该在 XML 中更改什么?
b) 子字符串InputStream 使用BufferedReader?

不知何故,我认为第二种方法会在弱 Android 手机上造成额外的延迟

编辑

我从调试器中提取了 XML 内容,发现第一个喜欢以 \r\n 结尾,然后下一个字符开始。这对你有什么影响吗?

这就是 XML 文件的样子。这是一个很小的应用程序崩溃的视觉原因。

<?xml version="1.0" encoding="utf-8"?>
<song>
  <artist>Pink Floyd</artist>
  <title>Shine On You Crazy Diamond</title>
  <picture>http://www.xxyz.com/images/image.jpg</picture>
  <time>Fri, 23 Nov 2012 11:22:31 GMT</time>
</song>

这就是从这个 XML 中获取 InputStream 的样子(仅起始字符)。

请指教!!!

【问题讨论】:

  • I found out that this may cause the first line of XML file (&lt;?xml version="1.0" encoding="utf-8"?&gt;) 我坚持你会得到这个错误,如果它是 not 在第一行或与你的 XML 在一行中,如果是这样,那么我会联系管理员,如果这不起作用,请尝试正则表达式。'以使其达到应有的方式
  • @Ahmad 这是什么意思“......然后尝试正则表达式。'以使其达到应有的方式”???
  • 好的,首先文档到底长什么样?能给个链接吗?
  • @Ahmad 不,我不能。这是一个秘密地点。我将在这里复制 XML。一个包含一个条目的基本小文件。
  • &lt;?xml version="1.0" encoding="utf-8"?&gt; 第一行还是之前有什么?例如。换行符?

标签: android xml-parsing xmlpullparser


【解决方案1】:

在检查了 xml 解析器源之后,似乎问题是由于响应开头的字节顺序标记而发生的,在我的例子中是 '77u/'(在 base64 中)。 如果您不将流转换为 String 而是直接对其进行解析,则解析器会正确地将其丢弃。

例如代替

String xml = new String(xmlData, "UTF-8");
KXmlParser parser = new KXmlParser();
parser.setInput(new StringReader(xml));

使用

KXmlParser parser = new KXmlParser();
parser.setInput(new ByteArrayInputStream(xmlData), null);

作为替代方案,您也可以子串直到第一个 '

【讨论】:

    【解决方案2】:

    我在应用程序上使用的数据文件遇到了同样的问题。在 android 2.3.* 上有这个异常,问题是 UTF-8 BOM,所以我在 Windows 上找到的更简单的解决方案是使用 Notepad++ 工具,它可以让你将文件编码转换为 UTF-8 而没有 BOM 和而已。

    【讨论】:

      【解决方案3】:

      遇到了同样的问题。

      对我来说,我用空格 ' ' 替换了所有 '\n',然后它就起作用了。

      PS:

      @Ahmad 说,前面的空行也可能导致这个问题,最好检查xml字符串的第一个字符'

      【讨论】:

        猜你喜欢
        • 2020-10-08
        • 1970-01-01
        • 2017-12-24
        • 1970-01-01
        • 2019-05-19
        • 2018-02-22
        • 1970-01-01
        • 2017-02-07
        • 2018-07-24
        相关资源
        最近更新 更多