XML Validator
Validujte syntaxi XML a zkontrolujte chyby správnosti dokumentu
XML vstup
Co je validace XML?
XML validátor ověřuje, zda XML dokument dodržuje strukturální pravidla definovaná specifikací XML 1.0 (doporučení W3C, páté vydání). V základu tento validátor potvrzuje, že dokument je správně utvořený: má jediný kořenový prvek, všechny značky jsou správně zanořeny a uzavřeny, hodnoty atributů jsou v uvozovkách a rezervované znaky používají předdefinované entity. Dokument, který nesplňuje některý z těchto požadavků, způsobí, že XML parsery vyhodí chybu místo toho, aby tiše produkovaly nesprávný výstup.
Rozdíl mezi správností (well-formedness) a platností (validity) je důležitý. Správně utvořený XML dokument splňuje syntaktická pravidla samotné specifikace XML. Platný XML dokument jde dál: musí také odpovídat omezením definovaným v externím schématu, jako je DTD (Document Type Definition), XSD (XML Schema Definition) nebo Relax NG schéma. Tento nástroj ověřuje správnost — první a nejčastější krok validace. Bez něj nemůže nic dalšího v procesu zpracování pokračovat.
Validace XML zachytí chyby dříve, než se dostanou do produkce. Neuzavřené značky, nespárované názvy prvků, nenahrazené ampersandy a duplicitní atributy patří k nejčastějším chybám při ručně upravovaném XML. Parsery v různých jazycích zpracovávají tyto chyby odlišně: některé selžou tiše, jiné vrátí neúplné výsledky a další vyhodí výjimku. Spuštění XML přes validátor tuto nejasnost odstraní a dá vám jasnou odpověď uspěl/neuspěl s informací o umístění chyby.
Proč použít online XML validátor?
Včasné zachycení syntaktických chyb XML předchází řetězovým selháním v aplikacích, které XML data zpracovávají. Validátor v prohlížeči poskytuje okamžitou zpětnou vazbu bez nutnosti instalovat nástroje příkazové řádky nebo konfigurovat zásuvné moduly IDE.
Případy použití XML validátoru
Pravidla správnosti XML
Specifikace XML 1.0 definuje přísnou sadu syntaktických pravidel. Dokument musí splňovat všechna, aby byl považován za správně utvořený. Níže jsou uvedena jednotlivá pravidla, jejich požadavky a správný příklad. Většina validačních chyb se vztahuje k jednomu z těchto pravidel.
| Pravidlo | Požadavek | Správný příklad |
|---|---|---|
| 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"?> |
Správně utvořený vs. DTD-platný vs. schéma-platný
Validace XML má tři úrovně. Tento nástroj ověřuje první z nich (správnost), která je předpokladem pro ostatní dvě.
Ukázky kódu
Validujte XML programově v různých jazycích. Každý příklad ověřuje správnost dokumentu a vrátí chybovou zprávu, pokud dokument není správně utvořen.
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..." }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 Falsepackage 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>
}# 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