Мы используем синтаксический анализатор SAX для анализа XML-файла и получаем следующее сообщение об ошибке:
org.xml.sax.SAXParseException; systemId: ../src/main/resources/staff.xml; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
Короче говоря, недопустимый текст или спецификация перед объявлением XML или другой кодировкой вызовут ошибку SAX – Содержимое не разрешено в прологе .
- 1. Недопустимый текст перед объявлением XML.
- 2. Спецификация в начале XML-файла.
- 3. Другой формат кодирования
- 4. Скачать Исходный Код
- 5. Рекомендации
1. Недопустимый текст перед объявлением XML.
В начале XML-объявления любой текст вызовет Содержимое не разрешено в прологе ошибка.
Например, приведенный ниже XML-файл содержит дополнительную маленькую точку . перед объявлением XML.
.yong mook kim mkyong 100000
Чтобы исправить это Удалите любой текст перед объявлением XML.
yong mook kim mkyong 100000
2. Спецификация в начале XML-файла.
Многие текстовые редакторы автоматически добавляют спецификацию в файл UTF-8.
Примечание Прочитайте следующие статьи:
- Java добавляет и удаляет спецификацию из файла UTF-8
- Википедия – Метка порядка байтов (спецификация)
Протестированный с Java 11 и Java 8, встроенный синтаксический анализатор SAX может правильно анализировать файл спецификации UTF-8; однако некоторые разработчики утверждали, что спецификация вызвала ошибку при анализе XML.
Чтобы исправить это , удалите спецификацию из файла UTF-8.
- Удалите спецификацию с помощью кода
- В notepad++ проверьте кодировку
UTF-8 без спецификации. - В Intellij IDEA прямо в файле выберите
Удалить спецификацию.
P.S Многие редакторы текста или кода имеют функции для добавления или удаления метка порядка байтов (спецификация) для файла попробуйте найти нужную функцию в меню.
3. Другой формат кодирования
Различная кодировка также вызвала популярный XML Содержимое не допускается в прологе.
Например, XML-файл UTF-8.
mkyong support 5000 yflow admin 8000
И мы используем кодировку UTF-16 для анализа вышеупомянутого XML-файла в кодировке UTF-8.
SAXParserFactory factory = SAXParserFactory.newInstance();
try (InputStream is = getXMLFileAsStream()) {
SAXParser saxParser = factory.newSAXParser();
// parse XML and map to object, it works, but not recommend, try JAXB
MapStaffObjectHandlerSax handler = new MapStaffObjectHandlerSax();
// more options for configuration
XMLReader xmlReader = saxParser.getXMLReader();
xmlReader.setContentHandler(handler);
InputSource source = new InputSource(is);
// UTF-16 to parse an UTF-8 XML file
source.setEncoding(StandardCharsets.UTF_16.toString());
xmlReader.parse(source);
// print all
List result = handler.getResult();
result.forEach(System.out::println);
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
Выход
[Fatal Error] :1:1: Content is not allowed in prolog. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1243) at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635) at com.mkyong.xml.sax.ReadXmlSaxParser2.main(ReadXmlSaxParser2.java:45)
4. Скачать Исходный Код
$клон git $клон git
$компакт-диск java-xml
$cd src/основной/java/com/mkyong/xml/саксофон/
5. Рекомендации
- Синтаксический анализатор Java SAX
- Java добавляет и удаляет спецификацию из файла UTF-8
- Википедия – Метка порядка байтов (спецификация)
- В чем разница между UTF-8 и UTF-8 без спецификации?
Оригинал: “https://mkyong.com/java/sax-error-content-is-not-allowed-in-prolog/”