Рубрики
Без рубрики

Ошибка SAX – Содержимое не допускается в прологе

Неверный текст или спецификация перед объявлением XML или другой кодировкой вызовут ошибку SAX – Содержимое не разрешено в прологе

Мы используем синтаксический анализатор 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 11 и Java 8, встроенный синтаксический анализатор SAX может правильно анализировать файл спецификации UTF-8; однако некоторые разработчики утверждали, что спецификация вызвала ошибку при анализе XML.

Чтобы исправить это , удалите спецификацию из файла UTF-8.

  1. Удалите спецификацию с помощью кода
  2. В notepad++ проверьте кодировку UTF-8 без спецификации .
  3. В 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. Рекомендации

Оригинал: “https://mkyong.com/java/sax-error-content-is-not-allowed-in-prolog/”