Ошибка XML · structure
Несоответствие открывающего и закрывающего тега
Элемент закрыт не в том порядке: парсер встретил закрывающий тег родителя, пока дочерний элемент оставался открытым.
Opening and ending tag mismatch: item line 2 and channel (line 4)Что это значит
Элементы XML должны быть строго вложены друг в друга. Парсер нашёл закрывающий тег, который не совпадает с последним открытым элементом, поэтому дерево документа построить невозможно.
В сообщении две позиции. Первая — «item line 2» — указывает, где был открыт незакрытый элемент, и именно она полезна: ошибка в отсутствующем закрывающем теге там, а не в строке, на которой парсер сдался.
Обычные причины
- Пропущен закрывающий тег, поэтому следующий закрывающий тег относится к родителю.
- Пересекающиеся теги — обычно результат склейки фрагментов шаблона: <a><b></a></b>.
- Привычки HTML в XML: <br>, <img> или <meta> без самозакрывающей косой черты.
- Условие в шаблоне, которое выводит открывающий тег только в одной ветке.
Как исправить
- Начните с первой указанной позиции и закройте этот элемент до его родителя.
- Самозакрывайте пустые элементы: <br/>, а не <br>.
- Если документ генерируется, собирайте его сериализатором, а не конкатенацией строк.
Та же ошибка в других парсерах
Разные парсеры, один и тот же дефект. Сообщения не переведены — вы искали именно их текст.
Xerces (Java)
The element type "item" must be terminated by the matching end-tag "</item>".expat (Python)
mismatched tag: line 4, column 2.NET System.Xml
The 'item' start tag on line 2 position 4 does not match the end tag of 'channel'.Go encoding/xml
element <item> closed by </channel>
До и после
Оба фрагмента проверяются тестами на настоящем парсере: первый выдаёт в точности сообщение выше, второй разбирается без ошибок.
<channel>
<item>
<title>First</title>
</channel><channel>
<item>
<title>First</title>
</item>
</channel>