2016-05-09 17 views
0

Eines der Dinge, die ich in diesem Jahr für die Einreichung von Beschwerden für Festivus aufgeschrieben habe, ist, wie Xerces/SAX2 Parsing-Fehler meldet.Xerxes/SAX2 meldet falsches Element

dieses Stück XSD Nehmen:

<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> 

und XML-Beispiel

<?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> 

ich diesen Fehler:

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)'

mir scheint, das Problem hier ist nicht element8, Es ist element6, die auf erforderlich festgelegt ist, aber die tatsächlich in der XML fehlt.

Ich habe einige Code, der versucht, diese Zeichenfolge zu analysieren und herauszufinden, was das eigentliche Problem ist, aber die Fehlerzeichenfolge enthält keine Informationen über optionale Elemente usw. Ich möglicherweise nicht richtig eingerichtet - vielleicht . Ich habe ein Problem im Allgemeinen mit SAXException - es ist fast nutzlos - so was ich brauche, ist mehr Informationen von etwas, die mir sagt, was das eigentliche Problem ist.

Wir verwenden Xerces 2.6 oder 2.8, da wir auf einem IBM i laufen und sie solche Updates nur dann bereitstellen, wenn Sie das Betriebssystem aktualisieren.

Antwort

0

Xerces Fehlermeldungen sind eigentlich ziemlich gut.

Man könnte argumentieren, dass in diesem speziellen Fall, es wäre besser, etwas zu sagen, nach dem Vorbild der

Encountered element8 but element6 was expected.

, die für diesen einfachen Fall in Ordnung, aber erkennen, dass im allgemeinen Fall kann es eine sein willkürlich komplexer Ausdruck, der alles abdeckte, was möglicherweise hätte erwartet werden können. Seien Sie darauf vorbereitet, eine ganze Menge Komplexität einzuführen, um kurz zu erklären, was alles zu einem bestimmten Zeitpunkt erlaubt ist, an dem das Parsen schief geht. Das Zitieren des ersten Widerspruchspunktes zusammen mit dem verletzten Elterngehaltmodell ist im Allgemeinen keine schlechte Diagnose.