Une des choses que j'ai écrites pour la diffusion des griefs de Festivus cette année est la façon dont Xerces/SAX2 signale les erreurs d'analyse.Xerxes/SAX2 signale un mauvais élément
Prenez ce morceau de XSD:
<xs:sequence>
<xs:element ref="element1" />
<xs:element ref="element2" />
<xs:element ref="element3" />
<xs:element ref="element4" minOccurs="0" />
<xs:element ref="element5" />
<xs:element ref="element6" minOccurs="1" />
<xs:element ref="element7" minOccurs="0" />
<xs:element ref="element8" minOccurs="0" />
<xs:choice minOccurs="0">
<xs:element ref="choiceElement1" />
<xs:element ref="choiceElement2" />
</xs:choice>
<xs:element ref="element9" minOccurs="0" />
</xs:sequence>
et de l'échantillon XML
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<xmldocument xmlns="http://www.somewebsite.com/xsd/xmldocument" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.somewebsite.com/xsd/xmldocument xmldocument.xsd">
<transaction msgId="MESSAGE-ID">
<element1>KS0003</element1>
<element2>2016-05-09</element2>
<element3>10:20:50</element3>
<element5>99433</element5>
<element8>jesse</element8>
</transaction>
</xmldocument>
Je reçois cette erreur:
RAW SAX2 ERROR: Error at file "/tmp/QACXV0Z346", line=10, column=17, XML element=element8, Element 'element8' is not valid for content model: '((element1,element2,element3,element4,element5,element6,element7,element8,(choiceElement1|choiceElement1)),element9)'
Il me semble que le problème ici est pas element8
, c'est element6
, qui est défini sur requis mais est celui qui manque réellement dans le fichier XML. J'ai un code qui tente d'analyser cette chaîne et de déterminer quel est le vrai problème, mais la chaîne d'erreur ne contient aucune information sur les éléments facultatifs, etc. Je ne configure pas les choses correctement - peut-être . J'ai un problème en général avec SAXException - c'est presque inutile - donc ce dont j'ai besoin est plus d'informations de quelque chose qui me dit quel est le vrai problème. Nous utilisons Xerces 2.6 ou 2.8 parce que nous fonctionnons sur un IBM i et ils ne fournissent pas de mises à jour de ce genre à moins que vous ne mettiez à jour le système d'exploitation.