XML-валидатор проверяет, соответствует ли XML-документ структурным правилам спецификации XML 1.0 (рекомендация W3C, пятое издание). Минимальное требование — документ должен быть корректно сформированным (well-formed): иметь единственный корневой элемент, все теги должны быть правильно вложены и закрыты, значения атрибутов — заключены в кавычки, а зарезервированные символы — заменены предопределёнными сущностями. Документ, нарушающий хотя бы одно из этих требований, вызовет ошибку в XML-парсере вместо того, чтобы молча вернуть некорректный результат.
Важно понимать разницу между корректной сформированностью (well-formedness) и валидностью (validity). Корректно сформированный XML-документ удовлетворяет синтаксическим правилам самой спецификации XML. Валидный XML-документ идёт дальше: он также соответствует ограничениям, заданным во внешней схеме — DTD (Document Type Definition), XSD (XML Schema Definition) или Relax NG. Этот инструмент проверяет корректную сформированность — первый и наиболее распространённый этап валидации. Без него ничто дальнейшее работать не будет.
Валидация XML позволяет обнаруживать ошибки до того, как они попадут в production. Незакрытые теги, несовпадающие имена элементов, неэкранированные амперсанды и дублирующиеся атрибуты — наиболее частые ошибки при ручном редактировании XML. Парсеры в разных языках обрабатывают эти ошибки по-разному: одни молча завершают работу, другие возвращают частичный результат, третьи выбрасывают исключения. Предварительная проверка XML через валидатор устраняет эту неопределённость и даёт чёткий ответ с указанием места ошибки.
Зачем использовать онлайн-валидатор XML?
Раннее обнаружение синтаксических ошибок XML предотвращает каскадные сбои в приложениях, потребляющих XML-данные. Браузерный валидатор даёт мгновенный результат без установки утилит командной строки или настройки плагинов в IDE.
⚡
Мгновенное обнаружение ошибок
Вставьте XML и получите результат с точным указанием места ошибки менее чем за секунду. Никаких ожиданий сборочных конвейеров и настройки CLI-инструментов.
🔒
Обработка без передачи данных
Весь разбор и валидация происходят в браузере с помощью DOMParser API. Ваш XML никогда не покидает компьютер и не отправляется ни на какой сервер.
🎯
Точные сообщения об ошибках
Инструмент показывает точную строку и столбец, где провалилась валидация, с описанием ошибки. Это быстрее, чем читать трассировку стека из парсера в коде приложения.
📋
Без аккаунта и установки
Откройте страницу, вставьте XML и посмотрите результат. Никаких форм регистрации, никакого настольного ПО, никаких расширений для браузера.
Сценарии использования XML Validator
Frontend-разработка
Проверяйте SVG-файлы и XHTML-фрагменты перед встраиванием в компоненты React или Vue. Один незакрытый тег в SVG способен сломать всё дерево компонентов.
Backend-разработка
Проверяйте SOAP-ответы, XML-RPC-нагрузки и RSS/Atom-ленты от сторонних API. Валидируйте сырой ответ перед написанием логики десериализации, чтобы не отлаживать исключения парсера в runtime.
DevOps и CI/CD
Убеждайтесь, что файлы Maven pom.xml, .csproj или Ant build-скрипты корректно сформированы после автоматических правок. Синтаксическая ошибка в конфигурации сборки может уронить весь конвейер с невнятным сообщением об ошибке.
QA и тестирование
Проверяйте XML-фикстуры и файлы с ожидаемым выводом перед запуском интеграционных тестов. Некорректно сформированные фикстуры дают ложноотрицательные результаты, которые тратят время на отладку впустую.
Инженерия данных
Проверяйте XML-экспорты из баз данных, государственных порталов открытых данных и ETL-конвейеров. Валидация структуры до написания XPath-запросов или XSLT-трансформаций предотвращает напрасные усилия при работе с повреждёнными исходными данными.
Изучение XML
Студенты, работающие с учебными материалами W3C по XML или XSLT, могут вставлять учебные файлы в валидатор для проверки синтаксиса. Сообщения об ошибках указывают на конкретную проблему, что ускоряет процесс обучения.
Правила корректной сформированности XML
Спецификация XML 1.0 определяет строгий набор синтаксических правил. Документ должен соответствовать всем им, чтобы считаться корректно сформированным. В таблице ниже перечислено каждое правило, его требования и корректный пример. Большинство ошибок валидации связаны с нарушением одного из этих правил.
Правило
Требование
Корректный пример
Single root element
Document must have exactly one root
<root>...</root>
Matched tags
Every opening tag needs a closing tag
<p>text</p>
Proper nesting
Tags must close in reverse order of opening
<a><b>...</b></a>
Quoted attributes
Attribute values must be in single or double quotes
<el attr="val"/>
Entity escaping
Reserved characters must use predefined entities
< > & " '
Case sensitivity
Tag names are case-sensitive: <A> is not </a>
<Book>...</Book>
No duplicate attributes
Each attribute name must appear once per element
<el a="1" b="2"/>
Valid XML declaration
If present, must be the very first line
<?xml version="1.0"?>
Корректная сформированность, DTD-валидность и схема-валидность
Валидация XML имеет три уровня. Этот инструмент проверяет первый (корректную сформированность), который является предварительным условием для двух остальных.
Корректно сформированный
Соответствует синтаксическим правилам XML 1.0: единственный корневой элемент, совпадающие теги, атрибуты в кавычках, правильная вложенность. Каждый XML-парсер проверяет это в первую очередь. Если документ не является корректно сформированным, он вообще не является XML.
DTD-валидный
Соответствует определению типа документа (DTD), которое задаёт допустимые элементы и атрибуты, их порядок и кратность. DTD объявляются встроенно или через ссылку DOCTYPE. DTD-валидация распространена в устаревших системах и XHTML.
Схема-валидный (XSD / Relax NG)
Соответствует XML Schema Definition (XSD) или схеме Relax NG. Эти схемы поддерживают типы данных (integer, date, URI), пространства имён и сложные модели содержимого. XSD-валидация является стандартом в SOAP веб-сервисах, медицинских данных HL7 и корпоративных интеграциях.
Примеры кода
Валидируйте XML программно на разных языках. Каждый пример проверяет корректную сформированность и возвращает сообщение об ошибке, если документ некорректен.
import xml.etree.ElementTree as ET
def validate_xml(xml_string):
try:
ET.fromstring(xml_string)
return True, "Well-formed XML"
except ET.ParseError as e:
return False, str(e)
valid, msg = validate_xml('<root><item>hello</item></root>')
# → (True, "Well-formed XML")
valid, msg = validate_xml('<root><item>hello</root>')
# → (False, "mismatched tag: line 1, column 27")
# With lxml — also supports XSD schema validation
from lxml import etree
schema = etree.XMLSchema(etree.parse('schema.xsd'))
doc = etree.fromstring(b'<root><item>hello</item></root>')
schema.validate(doc) # → True or False
Go
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func validateXML(raw string) error {
decoder := xml.NewDecoder(strings.NewReader(raw))
for {
_, err := decoder.Token()
if err != nil {
if err.Error() == "EOF" {
return nil
}
return err
}
}
}
func main() {
err := validateXML("<root><item>hello</item></root>")
fmt.Println(err) // → <nil>
err = validateXML("<root><item>hello</root>")
fmt.Println(err) // → XML syntax error: unexpected end element </root>
}
CLI (xmllint)
# Check well-formedness (part of libxml2, pre-installed on macOS/Linux)
xmllint --noout document.xml
# Exit code 0 = valid, non-zero = errors printed to stderr
# Validate against an XSD schema
xmllint --noout --schema schema.xsd document.xml
# Validate against a DTD
xmllint --noout --dtdvalid schema.dtd document.xml
# Validate from stdin
echo '<root><unclosed>' | xmllint --noout -
# → :1: parser error : Premature end of data in tag unclosed line 1
Часто задаваемые вопросы
В чём разница между корректно сформированным и валидным XML?
Корректно сформированный XML следует синтаксическим правилам спецификации XML 1.0: один корневой элемент, совпадающие и правильно вложенные теги, атрибуты в кавычках. Валидный XML идёт дальше — он также соответствует DTD или XSD-схеме, которая определяет допустимые элементы, атрибуты и типы данных. Документ может быть корректно сформированным, но не валидным, если синтаксис правильный, но нарушено ограничение схемы.
Может ли XML-документ быть валидным, но не корректно сформированным?
Нет. Корректная сформированность — обязательное предварительное условие для валидности. Если документ нарушает любое синтаксическое правило XML (незакрытый тег, атрибут без кавычек и т.д.), парсеры не могут построить из него дерево, и схема-валидация вообще не начнётся. Сначала устраните ошибки сформированности, затем проверяйте по схеме.
Каковы наиболее распространённые ошибки валидации XML?
Пять наиболее частых ошибок: незакрытые или несовпадающие теги, неэкранированные амперсанды в текстовом содержимом, значения атрибутов без кавычек, отсутствие корневого элемента, и неправильный регистр в именах тегов (XML чувствителен к регистру). Большинство из них возникают при ручном редактировании XML или при конкатенации строк в коде вместо использования правильного XML-сериализатора.
Валидация XML — это то же самое, что XML-линтинг?
Они пересекаются, но не идентичны. Валидация проверяет, соответствует ли документ спецификации XML (корректная сформированность) или схеме (DTD/XSD). Линтинг обычно идёт дальше и фиксирует стилистические проблемы: непоследовательные отступы, неиспользуемые объявления пространств имён или лишние значения атрибутов по умолчанию. xmllint из libxml2 объединяет оба подхода: --noout проверяет корректную сформированность, а --schema добавляет XSD-валидацию.
Чем валидация XML отличается от валидации JSON?
XML имеет более строгую и сложную грамматику, чем JSON. XML требует совпадающих открывающих и закрывающих тегов, поддерживает атрибуты, пространства имён, смешанное содержимое (текст и элементы вместе) и располагает несколькими языками схем (DTD, XSD, Relax NG, Schematron). Валидация JSON проверяет совпадение фигурных и квадратных скобок, ключи в кавычках и расстановку запятых. JSON Schema существует, но проще XSD. XML-документ обычно в 2–3 раза объёмнее эквивалентного JSON для тех же данных.
Проверяет ли этот инструмент соответствие XSD или DTD-схемам?
Этот инструмент проверяет только корректную сформированность: он подтверждает, что ваш XML следует синтаксическим правилам спецификации XML 1.0. Он не выполняет валидацию по внешним DTD или XSD-схемам. Для схема-валидации используйте xmllint --schema в командной строке или lxml в Python, который поддерживает как XSD, так и Relax NG.
Почему мой XML не проходит валидацию, хотя выглядит корректно?
Наиболее частые скрытые причины: метка порядка байтов (BOM) перед XML-декларацией, посторонний символ после закрывающего корневого тега, неэкранированный амперсанд в текстовом содержимом (используйте & вместо &), или префикс пространства имён, который используется, но нигде не объявлен. Скопируйте XML в hex-редактор или запустите через xmllint --noout, чтобы получить точное смещение в байтах до места ошибки.