Chybové hlášky XML, XSD a JSON

Stejnou chybu v XML popisuje každý parser jinými slovy. Každá stránka tady řeší jednu příčinu: sdružuje hlášky z Javy, PHP a xmllint (libxml2), Pythonu, .NET a prohlížečů, ukazuje chybný a opravený dokument a opravu v kódu. Hlášky XML, XSD i JSON v tabulkách jsou ověřené skutečnými parsery na stejných ukázkách, u JSON v Node.js, prohlížečích, Pythonu, .NET a PHP.

Autor: Aktualizováno

XML a XSD podle příčiny

  • Obsah před prologem Content is not allowed in prolog. · Start tag expected, '<' not found · Data at the root level is invalid.
  • Více kořenových elementů Extra content at the end of the document · junk after document element · There are multiple root elements.
  • Neukončená značka Opening and ending tag mismatch · must be terminated by the matching end-tag · mismatched tag
  • Znak & a entity EntityRef: expecting ';' · The entity name must immediately follow the '&' in the entity reference. · not well-formed (invalid token)
  • Špatné kódování Invalid byte 1 of 1-byte UTF-8 sequence. · Input is not proper UTF-8, indicate encoding ! · Invalid character in the given encoding.
  • Prázdný soubor, HTML, JSON Premature end of file. · Root element is missing. · Document is empty
  • XSD: neočekávaný element cvc-complex-type.2.4.a: Invalid content was found starting with element · This element is not expected.
  • XSD: chybějící element cvc-complex-type.2.4.b: The content of element · Missing child element(s).
  • XML: neplatný znak An invalid XML character (Unicode: 0x1) was found · PCDATA invalid Char value 1 · hexadecimal value 0x00, is an invalid character.
  • XML: nedeklarovaný prefix The prefix "p" for element "p:kniha" is not bound. · Namespace prefix p on kniha is not defined · 'p' is an undeclared prefix.
  • XSD: chybějící povinný atribut cvc-complex-type.4: Attribute 'id' must appear on element · is required but missing.
  • XSD: neplatná hodnota datového typu cvc-datatype-valid.1.2.1 · cvc-pattern-valid · cvc-enumeration-valid · is not a valid value of the atomic type
  • XSD: nesouhlasí jmenný prostor cvc-elt.1.a: Cannot find the declaration of element · No matching global declaration available for the validation root.

JSON podle příčiny

  • JSON: Unexpected token Unexpected token '<', "<!DOCTYPE html>" is not valid JSON · Expected property name or '}' in JSON · Expecting value: line 1 column 1 (char 0)
  • JSON: koncová čárka Expected double-quoted property name in JSON · Illegal trailing comma before end of object · Expecting property name enclosed in double quotes
  • JSON: neplatný escape Bad escaped character in JSON · Invalid \escape · Bad Unicode escape in JSON
  • JSON: neplatné číslo Unexpected number in JSON · Invalid leading zero before '1'. · Unexpected token 'N'
  • JSON: neočekávaný konec Unexpected end of JSON input · Unterminated string in JSON · JSON.parse: unexpected end of data

Další chyby

  • XPath nic nevrací: výchozí namespace Proč //entry v Atom feedu, sitemapě nebo faktuře vrací prázdný výsledek a jak zaregistrovat prefix v JavaScriptu, C#, Javě, Pythonu, PHP a PostgreSQL.

Jak číst chybovou hlášku

  • Dobře formovaný, nebo validní? Hlášky o značkách, entitách a kódování znamenají, že dokument vůbec není XML a parser skončil. Hlášky s cvc-…, This element is not expected nebo Missing child element přicházejí až z validace proti schématu — dokument je v pořádku, jen neodpovídá XSD.
  • Číslo řádku ukazuje, kde si parser chyby všiml. U neuzavřené značky to bývá až konec nadřazeného elementu, skutečná příčina je výš.
  • Řádek 1, sloupec 1 znamená problém hned na začátku: prázdný soubor, BOM, text před deklarací nebo odpověď, která není XML.
  • Opravuj od první chyby. Další hlášky často jen následují z té první.

Obecné vysvětlení, jak parser čte dokument a proč se zastaví na první chybě, najdeš v kapitole Jak funguje XML. Vlastní dokument zkontroluješ ve validátoru XML, který ukáže přesné místo chyby a u častých chyb nabídne opravu.

Který parser používá tvůj program

  • libxml2: PHP (DOMDocument, SimpleXML, XMLReader), xmllint, Python lxml, Ruby Nokogiri, validátor na XML.cz.
  • Xerces (součást JDK): Java — DocumentBuilder, SAXParser, JAXB, Spring, Maven.
  • expat: Python — xml.etree.ElementTree, minidom, xml.sax.
  • System.Xml: .NET — XmlDocument, XDocument, XmlReader.
  • Prohlížeče: DOMParser a zobrazení XML souboru; Chrome od verze 151 vlastní parser, Firefox parser odvozený z expat.