XML Validator

Перевіряйте синтаксис XML та виявляйте помилки коректності документа

Спробувати приклад

XML-введення

Працює локально · Безпечно вставляти секрети

Що таке валідація XML?

XML-валідатор перевіряє, чи відповідає XML-документ структурним правилам специфікації XML 1.0 (Рекомендація W3C, п'яте видання). Щонайменше, цей XML-валідатор підтверджує, що документ є коректно сформованим: він має один кореневий елемент, всі теги правильно вкладені та закриті, значення атрибутів взяті в лапки, а зарезервовані символи використовують наперед визначені entity-посилання. Документ, що не відповідає будь-якій із цих вимог, змушуватиме XML-процесори генерувати помилки, а не мовчки повертати некоректний результат.

Важливо розрізняти коректну сформованість та валідність. Коректно сформований XML-документ задовольняє синтаксичні правила специфікації XML. Валідний XML-документ іде далі: він також відповідає обмеженням, визначеним у зовнішній схемі, наприклад DTD (Document Type Definition), XSD (XML Schema Definition) або схемі Relax NG. Цей інструмент перевіряє коректну сформованість — перший і найпоширеніший крок валідації. Без нього жодна подальша обробка неможлива.

Валідація XML виявляє помилки до того, як вони потраплять на продакшн. Незакриті теги, невідповідні імена елементів, неекрановані амперсанди та дублюючі атрибути — найпоширеніші помилки при ручному редагуванні XML. Процесори різних мов програмування обробляють ці помилки по-різному: деякі мовчки ігнорують їх, деякі повертають часткові результати, а деякі генерують винятки. Попередня перевірка XML у валідаторі усуває цю неоднозначність і дає чітку відповідь «пройдено/не пройдено» з деталями про місце помилки.

Навіщо використовувати онлайн XML Validator?

Раннє виявлення синтаксичних помилок XML запобігає каскадним збоям у застосунках, що обробляють XML-дані. Браузерний валідатор дає миттєвий зворотний зв'язок без встановлення CLI-інструментів або налаштування плагінів IDE.

Миттєве виявлення помилок
Вставте XML і отримайте результат перевірки з точним зазначенням місця помилки менш ніж за секунду. Не потрібно чекати виконання пайплайну збірки або налаштовувати CLI-інструмент.
🔒
Конфіденційність за замовчуванням
Весь парсинг і валідація відбуваються у браузері за допомогою DOMParser API. Ваш XML ніколи не покидає вашу машину та не надсилається на жодний сервер.
🎯
Точне повідомлення про помилку
Перегляньте точний рядок і стовпець, де валідація не пройшла, разом із описом помилки. Це швидше, ніж читати стек трейс від процесора у коді вашого застосунку.
📋
Без облікового запису та встановлення
Відкрийте сторінку, вставте XML і перегляньте результат. Жодних форм реєстрації, настільного програмного забезпечення чи розширень браузера.

Сценарії використання XML Validator

Frontend-розробка
Перевіряйте SVG-файли та XHTML-фрагменти перед вбудовуванням у компоненти React або Vue. Один незакритий тег у SVG може зламати все дерево компонентів.
Backend-розробка
Перевіряйте SOAP-відповіді, XML-RPC-пейлоади та RSS/Atom-стрічки від сторонніх API. Валідуйте необроблену відповідь перед написанням логіки десеріалізації, щоб уникнути відлагодження виключень процесора під час виконання.
DevOps та CI/CD
Перевіряйте коректну сформованість файлів Maven pom.xml, .csproj або Ant-скриптів збірки після автоматизованих змін. Синтаксична помилка у конфігурації збірки може зупинити весь пайплайн із незрозумілим повідомленням про помилку.
QA та тестування
Перевіряйте XML-фікстури тестів та файли з очікуваними результатами перед запуском інтеграційних тестів. Некоректні фікстури спричиняють хибні негативи, які витрачають час на відлагодження.
Інженерія даних
Перевіряйте XML-експорти з баз даних, порталів відкритих даних та ETL-пайплайнів. Валідація структури перед написанням XPath-запитів або XSLT-трансформацій запобігає марним зусиллям із пошкодженими вхідними даними.
Вивчення XML
Студенти, що опрацьовують навчальні матеріали W3C XML або XSLT, можуть вставляти практичні файли у валідатор для перевірки синтаксису. Повідомлення про помилки вказують на точну проблему, що прискорює навчання.

Правила коректної сформованості XML

Специфікація XML 1.0 визначає суворий набір синтаксичних правил. Документ повинен відповідати всім із них, щоб вважатися коректно сформованим. У таблиці нижче наведено кожне правило, його вимогу та коректний приклад. Більшість помилок валідації пов'язана з одним із цих правил.

ПравилоВимогаКоректний приклад
Single root elementDocument must have exactly one root<root>...</root>
Matched tagsEvery opening tag needs a closing tag<p>text</p>
Proper nestingTags must close in reverse order of opening<a><b>...</b></a>
Quoted attributesAttribute values must be in single or double quotes<el attr="val"/>
Entity escapingReserved characters must use predefined entities&lt; &gt; &amp; &quot; &apos;
Case sensitivityTag names are case-sensitive: <A> is not </a><Book>...</Book>
No duplicate attributesEach attribute name must appear once per element<el a="1" b="2"/>
Valid XML declarationIf present, must be the very first line<?xml version="1.0"?>

Коректно сформований, валідний відносно DTD та валідний відносно схеми

Валідація XML має три рівні. Цей інструмент перевіряє перший (коректну сформованість), який є передумовою для двох інших.

Коректно сформований
Задовольняє синтаксичні правила XML 1.0: один кореневий елемент, відповідні теги, атрибути в лапках, правильна вкладеність. Кожен XML-процесор перевіряє це першим. Якщо документ не є коректно сформованим, він взагалі не є XML.
Валідний відносно DTD
Відповідає Document Type Definition, що визначає дозволені елементи та атрибути, їх порядок і кількість. DTD оголошуються вбудовано або через посилання DOCTYPE. Валідація DTD поширена в застарілих системах та XHTML.
Валідний відносно схеми (XSD / Relax NG)
Відповідає XML Schema Definition (XSD) або схемі Relax NG. Ці схеми підтримують типи даних (integer, date, URI), простори імен та складні моделі вмісту. Валідація XSD є стандартом у SOAP-вебсервісах, медичних даних HL7 та корпоративних інтеграціях.

Приклади коду

Валідуйте XML програмно різними мовами. Кожен приклад перевіряє коректну сформованість і повертає повідомлення про помилку, якщо документ некоректний.

JavaScript (DOMParser)
function validateXML(xmlString) {
  const parser = new DOMParser()
  const doc = parser.parseFromString(xmlString, 'application/xml')
  const error = doc.querySelector('parsererror')
  if (error) {
    return { valid: false, message: error.textContent }
  }
  return { valid: true, message: 'Well-formed XML' }
}

validateXML('<root><item>hello</item></root>')
// → { valid: true, message: "Well-formed XML" }

validateXML('<root><item>hello</root>')
// → { valid: false, message: "Opening and ending tag mismatch..." }
Python
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-оголошенням, зайвий символ після закривального кореневого тега, неекранований амперсанд у текстовому вмісті (використовуйте &amp; замість нього) або префікс простору імен, що використовується, але ніде не оголошений. Скопіюйте XML у hex-переглядач або виконайте xmllint --noout, щоб отримати точне зміщення байту помилки.