Подтвердить что ты не робот

Имеет ли допустимый XML файл объявление XML?

Я разбираю XML файл, используя Sax Parser of Xerces.
Требуется ли объявление XML <?xml version="1.0" encoding="UTF-8"?>?

4b9b3361

Ответ 1

В 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.

Update:

Ошибка "ошибка прогона/недействительная ошибка 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 - настоящая проблема!

Ответ 2

Объявление Xml не является обязательным, поэтому ваш xml хорошо сформирован без него. Но рекомендуется использовать его так, чтобы синтаксические анализаторы не делали неправильные предположения, в частности, о используемой кодировке.

Ответ 3

Требуется только в том случае, если вы не используете значения по умолчанию для version и encoding (которые вы в этом примере).