Найдите ошибки в этом XML-фрагменте и скажите, что сообщит парсер.
Сервис отклоняет этот ответ как not well-formed. Найдите каждую проблему и скажите, что сообщит парсер.
<order id=42>
<item>Keyboard</item>
<price>19.99</Price>
<note>Ship to <b>Riga</note></b>
</order>
Укажите каждую ошибку и приведите исправленный XML.
Здесь три ошибки well-formedness. Значение атрибута в id=42 не в кавычках; <price> закрыт как </Price>, но имена тегов XML регистрозависимы; а <b> и <note> перекрываются вместо вложенности. Парсер останавливается на первой ошибке — незакавыченном атрибуте — и выдаёт ошибку not-well-formed.
- ✗Думать, что имена тегов XML сопоставляются регистронезависимо
- ✗Считать, что парсер сам чинит перекрытую или незакавыченную разметку
- ✗Полагать, что ошибки well-formedness — предупреждения, а не фатальны
- →Почему парсер останавливается на первой ошибке, а не перечисляет все?
- →Как выглядела бы правильная вложенность
<b>и<note>?
Три нарушения well-formedness в исходном фрагменте:
<order id=42>— значение атрибута не заключено в кавычки. В XML значения атрибутов всегда в кавычках:id="42".<price>19.99</price>открыт в нижнем регистре, но закрыт как</Price>. Имена тегов XML регистрозависимы, поэтому это разные теги и открытый<price>остаётся незакрытым.<note>Ship to <b>Riga</note></b>— теги перекрываются:<b>открыт внутри<note>, но<note>закрыт раньше<b>. Вложенность должна строго соблюдаться:<b>закрывается до</note>.
Парсер XML работает как fatal-парсер: он останавливается на первой ошибке well-formedness (незакавыченный атрибут в первой строке) и сообщает о фатальной ошибке not-well-formed, не продолжая разбор. Это не предупреждения — документ отвергается целиком.
Исправленный вариант:
<order id="42">
<item>Keyboard</item>
<price>19.99</price>
<note>Ship to <b>Riga</b></note>
</order>