В 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 - настоящая проблема!