В этой статье показано, как использовать анализатор 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. Рекомендации
- Википедия – UTF-8
- Таблица кодирования UTF-8 и символы Юникода
- Апач ксерксес
- Синтаксический анализатор Java SAX
- SAX –Контент не разрешен в прологе
- SAX – Недопустимый байт 1 из 1-байтовой последовательности UTF-8
- Как читать XML-файл на Java (синтаксический анализатор SAX)
Оригинал: “https://mkyong.com/java/how-to-read-utf-8-xml-file-in-java-sax-parser/”