Я розбираю XML-файл за допомогою Sax Parser of Xerces.
Чи <?xml version="1.0" encoding="UTF-8"?>
потрібна декларація XML ?
Я розбираю XML-файл за допомогою Sax Parser of Xerces.
Чи <?xml version="1.0" encoding="UTF-8"?>
потрібна декларація XML ?
Відповіді:
У 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.
Оновлення:
Помилка "помилка prolog / недійсне кодування utf-8" вказує на те, що фактичні дані аналізатора, знайдені всередині файлу, не відповідали кодуванню, за яким у декларації XML йдеться. Або в деяких випадках дані, що знаходяться у файлі, не відповідали автоматично виявленому кодуванню.
Оскільки ваш файл містить позначку порядку байтів (BOM), він повинен бути в кодуванні UTF-16. Я підозрюю, що у вашій декларації написано, <?xml version="1.0" encoding="UTF-8"?>
що, очевидно, неправильно, коли NotePad файл змінив на UTF-16. Просте рішення - зняти encoding
і просто сказати <?xml version="1.0"?>
. Ви також можете відредагувати його, щоб сказати, encoding="UTF-16"
але це було б неправильно для оригінального файлу (якого не було в UTF-16) або якщо файл якимось чином зміниться на UTF-8 або якесь інше кодування.
Не турбуйтеся намагатися видалити BOM - це не причина проблеми. Використання NotePad або WordPad для редагування XML - справжня проблема!
Декларація Xml не є обов'язковою, тому ваш xml добре сформований без неї. Але рекомендується використовувати його так, щоб парсери не робили помилкових припущень, зокрема про використовуване кодування.