Я разбираю XML-файл с помощью Sax Parser of Xerces. Требуется ли
декларация XML <?xml version="1.0" encoding="UTF-8"?>
?
Я разбираю XML-файл с помощью Sax Parser of Xerces. Требуется ли
декларация XML <?xml version="1.0" encoding="UTF-8"?>
?
Ответы:
В XML 1.0 объявление XML не является обязательным . См. Раздел 2.8 Рекомендации XML 1.0 , где говорится, что его «следует» использовать - что означает, что это рекомендуется, но не обязательно. Однако в XML 1.1 объявление является обязательным . См. Раздел 2.8 Рекомендации XML 1.1 , где сказано «ДОЛЖНО» использоваться. Он даже говорится о том , что если декларация отсутствует, что автоматически подразумевает документ представляет собой XML - документ 1.0.
Обратите внимание , что в XML - декларацииencoding
и standalone
являются необязательными. Только version
обязательно. Кроме того, это не атрибуты, поэтому, если они присутствуют, они должны быть в следующем порядке:, version
за которым следует любой encoding
, за которым следует любой standalone
.
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
Если вы не укажете кодировку таким образом, синтаксические анализаторы XML попытаются угадать, какая кодировка используется. Рекомендация XML 1.0 описывает один из возможных способов автоматического определения кодировки символов . На практике это не проблема, если входные данные закодированы как UTF-8, UTF-16 или US-ASCII. Автоопределение не работает, когда обнаруживаются 8-битные кодировки, в которых используются символы вне диапазона US-ASCII (например, ISO 8859-1) - по возможности избегайте их создания.
standalone
Указывает , является ли документ XML может быть корректно обработан без DTD или нет. Люди редко им пользуются. В наши дни плохо разрабатывать формат XML, в котором отсутствует информация без его DTD.
Обновить:
Ошибка «Ошибка пролога / недопустимая кодировка utf-8» указывает на то, что фактические данные, обнаруженные анализатором внутри файла, не соответствуют кодировке, указанной в объявлении XML. Или в некоторых случаях данные внутри файла не соответствовали автоматически определяемой кодировке.
Поскольку ваш файл содержит метку порядка байтов (BOM), он должен быть в кодировке UTF-16. Я подозреваю, что в вашем заявлении говорится, <?xml version="1.0" encoding="UTF-8"?>
что это явно неверно, если файл был изменен на UTF-16 с помощью NotePad. Простое решение - удалить encoding
и просто сказать <?xml version="1.0"?>
. Вы также можете отредактировать его, чтобы сказать, encoding="UTF-16"
но это было бы неправильно для исходного файла (которого не было в UTF-16) или если файл каким-то образом был изменен обратно на UTF-8 или другую кодировку.
Не пытайтесь удалить спецификацию - это не причина проблемы. Использование NotePad или WordPad для редактирования XML - настоящая проблема!
Объявление XML является необязательным, поэтому ваш XML-код будет хорошо сформирован без него. Но рекомендуется использовать его, чтобы синтаксические анализаторы не сделали неправильных предположений, в частности, об используемой кодировке.