Я пытаюсь разобрать 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 · Chuck Krutsinger
В 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;
}