Я разбираю XML-файл с помощью Sax Parser of Xerces. Требуется ли
декларация XML <?xml version="1.0" encoding="UTF-8"?>
?
xml
xml-declaration
Эрос
источник
источник
Ответы:
В 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 попытаются угадать, какая кодировка используется. Рекомендация 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-код будет хорошо сформирован без него. Но рекомендуется использовать его, чтобы синтаксические анализаторы не сделали неправильных предположений, в частности, об используемой кодировке.
источник
Это требуется только в том случае, если вы не используете значения по умолчанию для
version
иencoding
(которые вы используете в этом примере).источник