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

Как прочитать XML-файл UTF–8 на Java – (синтаксический анализатор SAX)

В этой статье показано, как использовать анализатор SAX для чтения или анализа XML-файла UTF-8.

В этой статье показано, как использовать анализатор SAX для чтения или анализа XML-файла UTF-8.

Содержание

  • 1. Синтаксический анализатор SAX для анализа XML-файла UTF-8.
  • 2. Кодировка символов в XML и коде
  • 3. Распространенные ошибки саксофона
    • 3.1 Недопустимый байт 1 из 1-байтовой последовательности UTF-8
    • 3.2 Содержание не допускается в прологе
    • 3.3 Имя сущности должно сразу следовать за “&” в ссылке на сущность
  • 4. Скачать Исходный Код
  • 5. Рекомендации

1. Синтаксический анализатор SAX для анализа XML-файла UTF-8.

1.1 XML-файл содержит UTF-8 и китайские иероглифы.



    
        揚木金
        support & code
        5000
        
    
    
        yflow
        admin
        8000
        
    

1.2 В приведенном ниже примере явно задана кодировка UTF-8 .

Примечание Для обработчика SAX PrintAllHandlerSax обратитесь к этой статье .

package com.mkyong.xml.sax;

import com.mkyong.xml.sax.handler.PrintAllHandlerSax;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class ReadXmlSaxParser {

  private static final String FILENAME = "src/main/resources/staff-unicode.xml";

  public static void main(String[] args) {

      SAXParserFactory factory = SAXParserFactory.newInstance();

      try {

          SAXParser saxParser = factory.newSAXParser();

          PrintAllHandlerSax handler = new PrintAllHandlerSax();

          XMLReader xmlReader = saxParser.getXMLReader();
          xmlReader.setContentHandler(handler);

          InputSource source = new InputSource(FILENAME);

          // explicitly set a encoding
          source.setEncoding(StandardCharsets.UTF_8.displayName());

          xmlReader.parse(source);

      } catch (ParserConfigurationException | SAXException | IOException e) {
          e.printStackTrace();
      }

  }

}

Выход

Start Document
Start Element : Company
Start Element : staff
Staff id : 1001
Start Element : name
End Element : name
Name : 揚木金
Start Element : role
End Element : role
Role : support & code
Start Element : salary
Currency :USD
End Element : salary
Salary : 5000
Start Element : bio
End Element : bio
Bio : HTML tag testing
End Element : staff
Start Element : staff
Staff id : 1002
Start Element : name
End Element : name
Name : yflow
Start Element : role
End Element : role
Role : admin
Start Element : salary
Currency :EUR
End Element : salary
Salary : 8000
Start Element : bio
End Element : bio
Bio : a & b
End Element : staff
End Element : Company
End Document  

2. Кодировка символов в XML и коде

Убедитесь, что мы используем правильную кодировку для синтаксического анализа XML-файла.

2.1 Для XML-файлов , лучше всего объявить атрибут кодировка .





Например, ниже приведен XML-файл в кодировке UTF-8.





2.2 Для синтаксического анализатора SAX мы можем установить кодировку с помощью XmlReader .

  SAXParserFactory factory = SAXParserFactory.newInstance();

  try {

      SAXParser saxParser = factory.newSAXParser();

      PrintAllHandlerSax handler = new PrintAllHandlerSax();

      XMLReader xmlReader = saxParser.getXMLReader();
      xmlReader.setContentHandler(handler);

      InputSource source = new InputSource(FILENAME);

      // utf-8
      source.setEncoding(StandardCharsets.UTF_8.displayName());

      // utf-16
      // source.setEncoding(StandardCharsets.UTF_16.displayName());

      // ascii
      // source.setEncoding(StandardCharsets.US_ASCII.displayName());

      xmlReader.parse(source);

  } catch (ParserConfigurationException | SAXException | IOException e) {
      e.printStackTrace();
  }

3. Распространенные ошибки саксофона

Ниже приведены некоторые распространенные ошибки при синтаксическом анализе SAX XML.

3.1 Недопустимый байт 1 из 1-байтовой последовательности UTF-8

XML-файл содержит недопустимые символы UTF-8, прочтите это.

3.2 Содержание не допускается в прологе

XML-файл содержит недопустимый текст или спецификацию перед объявлением XML, прочитайте это.

3.3 Имя сущности должно сразу следовать за “&” в ссылке на сущность

& является недопустимым символом в XML-файле, пожалуйста, замените его на & или оберните с помощью CDATA, например [ CDATA[a и b]]> .

4. Скачать Исходный Код

$клон git $клон git

$компакт-диск java-xml

$cd src/основной/java/com/mkyong/xml/саксофон/

5. Рекомендации

Оригинал: “https://mkyong.com/java/how-to-read-utf-8-xml-file-in-java-sax-parser/”