2016-03-25 11 views
2

Ich versuche gerade, eine XML-Datei in Java zu parsen. Ich habe viel recherchiert und versucht, viele der verfügbaren Bibliotheken wie DOM, SAX usw. zu verwenden. Alle diese sind groß und haben viele Optionen. Mein Problem ist jedoch, dass ich in der Lage sein möchte, eine komplette XML-Datei zu parsen und dann mögliche Fehler auszugeben. Mit SAX beispielsweise wird die Datei analysiert, aber nur der erste Syntaxfehler ausgegeben. Gibt es überhaupt einen Fehler, um alle Fehler auf einmal ausgeben zu können wie ein Compiler oder bin ich Pech?XML-Datei in Java analysieren und alle Fehler ausgeben

Wenn dies nicht möglich ist, versuche ich eine Arbeit um zu parsen meine XML-Datei wie eine normale Textdatei und greifen alle öffnenden und schließenden Tags. Gibt es dafür einen einfacheren Weg als viele bedingte Anweisungen und Regeln zu erstellen?

Jede Hilfe wird sehr geschätzt.

Dank

+1

Wenn Sie eine * Syntax * -Fehler haben, können Sie nichts über den Rest der Datei sicher sagen. – chrylis

+0

Ja, das ist, was ich dachte. Gibt es eine Möglichkeit, alle XML-öffnenden und schließenden Tags in Java zu erfassen? Ich analysiere normal, aber ich realisiere, dass ich eine Menge Bedingungen erzeuge und es scheint nicht effizient zu sein. – BlueMoose

+0

Woher wissen Sie, dass das schließende Tag tatsächlich ein schließendes Tag ist, wenn ein Syntaxfehler vorliegt? Vielleicht war der Syntaxfehler, dass das "schließende Tag" in einem Kommentar sein sollte, aber der Kommentar hat einen Tippfehler. – chrylis

Antwort

-1

Ich glaube nicht, Ihnen viel Erfolg zu finden, diese Art von XML-Parser haben. Per Definition sollte ein XML-Parser beim ersten gefundenen Fehler eine Ausnahme auslösen. Wenn nicht, wird es keine Möglichkeit hat, an den Knotentyp oder Richtigkeit des nachfolgenden Textes zu identifizieren ...

+0

Ja, leider scheint es so. Es macht logisch Sinn. Ich muss nur ändern, woran ich arbeite, um meine Bedürfnisse zu erfüllen. Ich schätze das Feedback jedoch. – BlueMoose

+0

@ vtd-xml-author: Das ist nicht korrekt. Siehe meine Antwort für Details. – MRalwasser

0

Verwenden Sie einfach ein benutzerdefinierteErrorHandler (als Standard ErrorHandler Ausnahme beim ersten Fehler wirft).

public void validateXML(SAXSource source, Schema schema) throws SAXException, IOException 
    { 
    javax.xml.validation.Validator validator = schema.newValidator(); 
    validator.setErrorHandler(new ErrorHandler() 
    { 

     @Override 
     public void warning(SAXParseException exception) throws SAXException 
     { 
     System.err.println("Notice: " + exception.toString()); 
     } 

     @Override 
     public void fatalError(SAXParseException exception) throws SAXException 
     { 
     error(exception); 
     } 

     @Override 
     public void error(SAXParseException exception) throws SAXException 
     { 
     System.err.println("Error occured: " + exception.toString()); 
     } 
    }); 
    validator.validate(source); 
    } 
Verwandte Themen