Bonjour,
Je souhaiterai utiliser l'API Xerces pour valider des documents XML par rapport à des schéma XSD.
Pour avoir une idée, voici une parcelle du code de validation:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
File schemaLocation = new File("C:\\test.xsd");
Schema schema = factory.newSchema(schemaLocation);
Validator validator = schema.newValidator();
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); // never forget this
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("C:\\test.xml");
DOMSource source = new DOMSource(doc);
DOMResult result = new DOMResult();
try {
ErrorHandler lenient = new ForgivingErrorHandler();
validator.setErrorHandler(lenient);
validator.validate(source, result);
Document augmented = (Document) result.getNode();
// do whatever you need to do with the augmented document...
System.out.println("correct");
//affiche(augmented.getDocumentElement());
}
catch (SAXParseException e) {
System.out.println(e.getMessage());
}
catch (SAXException ex) {
System.out.println( " incorrect ");
} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class ForgivingErrorHandler implements ErrorHandler {
public void warning(SAXParseException ex) {
System.err.println("error: "+ex.getMessage());
System.err.println("public ID: "+ex.getPublicId());
System.err.println("system ID: "+ex.getSystemId());
System.err.println("ligne number: "+ex.getLineNumber());
System.err.println("Colomn number: "+ex.getColumnNumber());
}
public void error(SAXParseException ex) {
System.err.println("error: "+ex.getMessage());
System.err.println("public ID: "+ex.getPublicId());
System.err.println("system ID: "+ex.getSystemId());
System.err.println("ligne number: "+ex.getLineNumber());
System.err.println("Colomn number: "+ex.getColumnNumber());
}
public void fatalError(SAXParseException ex) throws SAXException {
throw ex;
}
} |
Tous marche plutôt bien. Sauf que les retours du parseur lorsque le fichier est incorrect sont en anglais.
error: cvc-datatype-valid.1.2.1: '2009-04-02T09:00:02.0Zx' is not a valid value for 'dateTime'.
Ma question est donc: Est-ce qu'il est possible d'avoir ces résultats en Français ????
Merci d'avance.
Partager