Android, org.w3c.dom: недоступна проверка реализации DocumentBuilder - PullRequest
3 голосов
/ 03 декабря 2011

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

Вот как я хочу разобрать документ:

DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
dbfac.setValidating(true);
dbfac.setIgnoringElementContentWhitespace(true);
DocumentBuilder docBuilder;
docBuilder = dbfac.newDocumentBuilder();
Document d = docBuilder.parse(file);

file - это URL-адрес расположения файла в виде строки. При выполнении последней строки этого кода выдается следующее исключение:

javax.xml.parsers.ParserConfigurationException: No validating DocumentBuilder implementation available

Когда я вынимаю dbfac.setValidating(true), исключение не возникает, но тогда у меня проблема с пробелами.

Кто-нибудь знает, как решить эту проблему? Нужно ли использовать другой парсер?

1 Ответ

3 голосов
/ 14 марта 2012

В Android реализация жестко запрограммирована на выдачу исключения, когда для проверки задано значение true.Вот ссылка на исходный код Android :

@Override
public DocumentBuilder newDocumentBuilder()
        throws ParserConfigurationException {
    if (isValidating()) {
        throw new ParserConfigurationException(
                "No validating DocumentBuilder implementation available");
    }

    /**
     * TODO If Android is going to support a different DocumentBuilder
     * implementations, this should be wired here. If we wanted to
     * allow different implementations, these could be distinguished by
     * a special feature (like http://www.org.apache.harmony.com/xml/expat)
     * or by throwing the full SPI monty at it.
     */
    DocumentBuilderImpl builder = new DocumentBuilderImpl();
    builder.setCoalescing(isCoalescing());
    builder.setIgnoreComments(isIgnoringComments());
    builder.setIgnoreElementContentWhitespace(isIgnoringElementContentWhitespace());
    builder.setNamespaceAware(isNamespaceAware());

    // TODO What about expandEntityReferences?

    return builder;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...