Ошибка XML Pull Parser при наличии объявления - PullRequest
1 голос
/ 08 февраля 2011

Я пытаюсь разобрать документ xml, используя синтаксический анализатор xml pull. Все работало нормально, пока я не начал работать с документом xml, содержащим объявление xxml:

Когда объявление есть, я получаю следующую ошибку:

02-08 15: 37: 16.960: WARN / System.err (9721): org.xmlpull.v1.XmlPullParserException: PI не должен начинаться с xml (позиция: неизвестна »¿@ 1: 5 в 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 ]

3 голосов
/ 09 февраля 2011

Кажется, что ваш xml-файл начинается с метки порядка байтов UTF-8 (см. здесь ). Вероятно, произошло, когда вы скопировали декларацию. Решение зависит от редактора, который вы используете, некоторые из них могут быть настроены так, чтобы не записывать спецификацию. Иногда он исчезает, когда вы удаляете первый символ файла и вводите его снова.

0 голосов
/ 11 августа 2013

У меня тоже была такая же проблема, но я понял, что это не ошибка неправильно сформированного XML-документа. Иногда это может быть проблемой, но на этот раз это связано с тем, что сервер не использует правильный поток вывода, который использует сервер. отправить данные на клиентскую сторону ... мой код на стороне сервера это:

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

но мой код на стороне клиента:

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

так что, наконец, я изменил потоки, чтобы они соответствовали друг другу, тогда проблема также решена ... Я до сих пор не понимаю, почему это происходит, когда эти потоки отличаются, даже если потоки наследуются одним и тем же InputStream

(я использовал это для J2ME SDK 3.0.5)

0 голосов
/ 29 февраля 2012

У меня была такая же проблема, и она на самом деле вызвана кодировкой UTF-8, но я не мог ее решить, потому что XML-файл был создан сервером, я не мог изменить ее

...