Validator get invalid Nodename

Shoox

Mitglied
Hallo,
ich habe eine kleine xml checker klasse geschrieben und ich würde gern, wenn die validation fehlgeschlagen ist, den Namen des Knoten erfahren, der das Problem verursacht hat.
Hier ist einmal die Methode fürs validieren.

Java:
   public void validate(File xml, File xsd) throws SAXException, IOException{
      SchemaFactory fact = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
      Schema schema = fact.newSchema(new StreamSource(xsd));
      Validator valid = schema.newValidator();
      valid.validate(new StreamSource(xml));
   }
Ich hab schon versucht mit einem StreamResult was zu erreichen, aber irgendwie hat mir das nicht den gewünschten Erfolg eingebracht.
Muss ich hier einen ErrorHandler schreiben/zuweisen damit ich den Knoten heraus bekomme? Gibt da eine "best practice" Lösung? Oder muss ich die SAXException weiter auseinander zerpflücken?

Vielen Dank im vorraus.
LG Shoox
 

Shoox

Mitglied
Die SAXParseException wird vom validate geworfen mit folgender Ausgabe:
Java:
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:417)
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3181)
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocallyValidType(XMLSchemaValidator.java:3096)
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processElementContent(XMLSchemaValidator.java:3006)
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleEndElement(XMLSchemaValidator.java:2149)
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.endElement(XMLSchemaValidator.java:817)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2938)
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
com.sun.org.apache.xerces.internal.jaxp.validation.StreamValidatorHelper.validate(StreamValidatorHelper.java:144)
com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:111)
javax.xml.validation.Validator.validate(Validator.java:127)
hmm... hilft mir glaub ich aber nicht wirklich weiter.
 

Shoox

Mitglied
hmm... die Zeilennummer bekomm ich da schon mal mit getLineNumer() raus. Das getPublicId() liefert zwar null, aber nja, Zeilennummer is ja eigentlich besser als "Name" wenn da 3000 Tags drinn sind, die "Name" heißen ^^

danke für die Hilfe.
 

DerEisteeTrinker

Bekanntes Mitglied
Das Problem kann nur sein, dass du vllt ein XML-Dokument hast, was nur eine Zeile hat. Ich verarbeite in der Regel immer nur XMLs, die jungfräulich in Bezug auf Zeilenumbrüche sind.
 

Shoox

Mitglied
nope, mein XML (und auch das XSD) ist definitiv mit Zeilenumbrüchen und Einrückungen, aber mit der SAXParseException kann ich schon mal gut arbeiten, aber ich werde versuchen heraus zu bekommen, warum das getPublicId() nicht hinhaut, laut Doc liefert es null wenn kein Identifier verfügbar ist...
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben