声明存在时,XML Pull Parser错误

时间:2011-02-08 20:47:18

标签: android xml xmlpullparser

我正在尝试使用xml pull解析器解析xml文档。 一切正常,直到我开始处理包含xxml声明的xml文档:

当声明出现时,我收到以下错误:

02-08 15:37:16.960:WARN / System.err(9721):org.xmlpull.v1.XmlPullParserException:PI不能以xml开头(位置:未知@ 1:5 in java.io .InputStreamReader @ 47ec2770)

如果我从文件中取出声明,一切正常。 对我来说,切换到另一个解析器为时已晚,所以我需要让它工作!

这是我的解析器代码的样子

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(false);
    // factory.setFeature(XmlPullParser.FEATURE_PROCESS_DOCDECL, true);
    XmlPullParser xpp = factory.newPullParser();

    // get a reference to the file.

    File file = new File(Environment.getExternalStorageDirectory() + "/"
            + Constants.SD_CARD_DIR + "/" + Constants.XMLPATH);
    // create an input stream to be read by the stream reader.
    FileInputStream fis = new FileInputStream(file);
    // set the input for the parser using an InputStreamReader
    xpp.setInput(new InputStreamReader(fis));
    int eventType = xpp.getEventType();

    // /

    while (eventType != XmlPullParser.END_DOCUMENT) {...}

3 个答案:

答案 0 :(得分:3)

您的xml文件似乎以UTF-8字节顺序标记开头(请参阅here)。复制声明时可能发生了。解决方案取决于您正在使用的编辑器,其中一些可以设置为不编写BOM。有时它会在您删除文件的第一个字符并再次输入时消失。

答案 1 :(得分:0)

我遇到了同样的问题,它实际上是由utf-8 bom编码引起的,但我无法解决,因为xml文件是由服务器创建的,我无法修改它

答案 2 :(得分:0)

我也遇到了同样的问题,但我发现它不是没有格式良好的XML文档的错误,有时候会出现问题,但这次是由于没有使用服务器正在使用的正确输出流将数据发送到客户端...  我的服务器端代码是这样的:

DataOutputStream dos = new DataOutputStream((OutputStream) response.getOutputStream());

但我的客户端代码是:

InputStream is =(InputStream) httpConnection.openDataInputStream();

所以最后我改变了流相互匹配,然后问题也解决了...... 我仍然不明白为什么当这些流不同时,即使流由同一个InputStream继承,也会发生这种情况

(我将其用于J2ME sdk 3.0.5)