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