1

我正在尝试使用 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) {...}
4

3 回答 3

3

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

于 2011-02-09T08:59:45.047 回答
0

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

于 2012-02-29T05:28:25.697 回答
0

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

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

但我的客户端代码是:

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

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

(我将它用于 J2ME sdk 3.0.5)

于 2013-08-11T17:52:20.897 回答