Hallo,
Ich bin derzeit mit der Validierung von XML-Objekten betraut. Diese werden gegen eine oder mehrere Schemadateien validiert.
Zum Validieren nutzen wir Java-Boardmittel. (siehe Code unten)
Mir selbst wird der Inhalt der XML-Datei als String übertragen. Daran kann ich leider nichts ändern.
Leider habe ich das Problem, dass beim Einlesen auch die Leerzeichen und Tabs in den Content gezogen werden, die der besseren Lesbarkeit dienen.
Also aus
wird statt "BlaBlubb" stattdessen "BlaBlubb " (die Einrückung vom InnerTag wird als Leerzeichen angefügt).
Dies führt im Rahmen unserer Validierung dazu, dass die Validierung fehlschlägt, obwohl das File eigentlich valide ist. (Entsprechende Felder lassen keine Leerzeichen am Ende zu).
Gibt es dann eine Möglichkeit, den Validator so einzustellen, dass er solche Whitespaces erkennt?
Unsere Validationsmethode sieht derzeit wie folgt aus:
Als Sources werden die zugehörigen Schemadateien und weitere Abhängigkeiten (z.B. xml.xsd) übergeben. Der ErrorHandler (hier ValidationResult) dient dazu, die Fehlermeldungen zu speichern, entsprechend aufzubereiten und an einzelnen Stellen darauf zu reagieren (hat etwas mit Kompatibilität zu einer älteren Version zu tun)
Eine unsere Lösungen war zunächst, im übergebenen String alle führenden Leerzeichen zu entfernen. Dies führt aber auch dazu, dass z.B. Dinge, die ein Nutzer so formatiert hat, verworfen werden würden.
Es kann ja durchaus sein, dass ein Nutzer absichtlich einen Zeilenumbruch eingefügt hat und - der Lesbarkeit halber - extra Leerzeichen eingefügt hat.
Hat da einer vielleicht eine Lösung für mich?
Ich bin derzeit mit der Validierung von XML-Objekten betraut. Diese werden gegen eine oder mehrere Schemadateien validiert.
Zum Validieren nutzen wir Java-Boardmittel. (siehe Code unten)
Mir selbst wird der Inhalt der XML-Datei als String übertragen. Daran kann ich leider nichts ändern.
Leider habe ich das Problem, dass beim Einlesen auch die Leerzeichen und Tabs in den Content gezogen werden, die der besseren Lesbarkeit dienen.
Also aus
Code:
<Tag>
<InnerTag>
BlaBlubb
</InnerTag>
</Tag>
wird statt "BlaBlubb" stattdessen "BlaBlubb " (die Einrückung vom InnerTag wird als Leerzeichen angefügt).
Dies führt im Rahmen unserer Validierung dazu, dass die Validierung fehlschlägt, obwohl das File eigentlich valide ist. (Entsprechende Felder lassen keine Leerzeichen am Ende zu).
Gibt es dann eine Möglichkeit, den Validator so einzustellen, dass er solche Whitespaces erkennt?
Unsere Validationsmethode sieht derzeit wie folgt aus:
Code:
private static ValidationResult validate(String fileContent, Source... sources) {
Assert.notNull(fileContent, "Xml file for validation must not be null");
Assert.noNullElements(sources, "Sources for validation must not be null or empty");
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
ValidationResult result = new ValidationResult();
try {
schemaFactory.setErrorHandler(result);
Schema schema = schemaFactory.newSchema(sources);
Validator validator = schema.newValidator();
validator.setErrorHandler(result);
validator.validate(new StreamSource(new StringReader(fileContent)));
return result;
} catch (SAXException e) {
return result;
} catch (IOException e) {
throw new IllegalStateException("An IOException occured during xml validation.", e);
}
}
Als Sources werden die zugehörigen Schemadateien und weitere Abhängigkeiten (z.B. xml.xsd) übergeben. Der ErrorHandler (hier ValidationResult) dient dazu, die Fehlermeldungen zu speichern, entsprechend aufzubereiten und an einzelnen Stellen darauf zu reagieren (hat etwas mit Kompatibilität zu einer älteren Version zu tun)
Eine unsere Lösungen war zunächst, im übergebenen String alle führenden Leerzeichen zu entfernen. Dies führt aber auch dazu, dass z.B. Dinge, die ein Nutzer so formatiert hat, verworfen werden würden.
Es kann ja durchaus sein, dass ein Nutzer absichtlich einen Zeilenumbruch eingefügt hat und - der Lesbarkeit halber - extra Leerzeichen eingefügt hat.
Hat da einer vielleicht eine Lösung für mich?