Почему этот код продолжает вызывать исключение SaxParseException: «PI не должен начинаться с xml»? - PullRequest
8 голосов
/ 14 февраля 2011

Этот код используется для генерации XML-документа из его представления String. Он отлично работает в моих небольших модульных тестах, но не работает в моих реальных данных XML. Строка, в которой он запускается: Document doc = db.parse(is);

Есть идеи?

public static Document FromString(String xml)
{
    // from http://www.rgagnon.com/javadetails/java-0573.html
    try
    {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(xml));

        Document doc = db.parse(is);
        doc.normalize();

        return doc;
    }
    catch (Exception e)
    {
        Log.WriteError("Failed to parse XML", e, "XML.FromString(String)");
        return null;
    }
}

Ответы [ 6 ]

16 голосов
/ 14 февраля 2011

Спасибо за вашу помощь всем.

Я отбросил <?xml version="1.0" encoding="utf-8"?>, который устранил эту ошибку.До сих пор не понимаю, в чем может быть причина, но это все же сработало.

Я продолжал обнаруживать, что один из моих буферизованных писателей (при извлечении из zip-файла в память) не очищался,из-за чего строка xml была неполной.

Спасибо всем за помощь!

3 голосов
/ 14 сентября 2011

У меня была такая же проблема при разборе XML, сгенерированного PHP.После того, как я добавил заголовок ContentType «text / xml», он работает как шарм.

3 голосов
/ 14 июня 2011

Вы можете проверить, имеет ли ваш xml-файл заголовок спецификации

2 голосов
/ 07 июля 2012

как сказал @StaxMan, удалите все неизвестные символы до

responseBody = responseBody.substring (responseBody.indexOf ("<")); </p>

1 голос
/ 13 июля 2012

эта проблема также будет вызвана наличием строки <? Xml version = "1.0" encoding = "UTF-8"?> Вместе с данными xml в одной строке ...

<? Xml version = "1.0" encoding = "UTF-8"?> 0 Portada http://iphone.elnorte.com/libre/online07/a ....

0 голосов
/ 03 июня 2012

Вы должны были проверить кодировку файла вместо удаления строки xml.

Я обнаружил, что мой Eclipse (в Windows) имел ту же проблему с ресурсом, закодированным как Unix-U8. После преобразования в DOS-U8 ошибка исчезла.

...