Android, org.w3c.dom: недоступна проверка реализации DocumentBuilder

Я пытаюсь разобрать 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), никаких исключений не возникает, но тогда у меня проблема с пробелами.

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


person Marc    schedule 03.12.2011    source источник
comment
Я только что нашел сообщение в google-коде, в котором указано, что проверка XML не реализована: ссылка Этому посту 1,5 года, и я не знаю, изменилось ли уже что-то. Есть ли другой парсер, реализующий проверку XML или способный игнорировать пробелы?   -  person Marc    schedule 04.12.2011


Ответы (1)


В 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;
}
person Chuck Krutsinger    schedule 13.03.2012