Bonjour à tous!!
je recherche un moyen si possible de faire la validation complète d'un fichier xml à partir d'un schema, c'est à dire lorsque je detecte une erreur quelconque j'aimerais continuer la validation afin de détecter toutes les erreurs possibles dans le fichier xml.
voici mon code:
le resultat produit est bie la validité du document xml mais pas la totalité, ce code detecte juste la première erreur et s'arrète (par exemple SAXException le format de la date n'est pas correcte). Moi je souhaiterais avoir aussi les autres erreurs possibles dans monfichier.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 try { DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document document = parser.parse(new File("monfichier.xml")); // on cree SchemaFactory capable d'interpertrer un XML schemas SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); // on recupère le fichier representant le schema xsd Source schemaFile = new StreamSource(new File("monSchema.xsd")); // on cree une instance du schema Schema schema = factory.newSchema(schemaFile); // on cree un objet validateur pour valider une instance de notre document Validator validator = schema.newValidator(); ErrorHandlerImpl errorImpl = new ErrorHandlerImpl(); validator.setErrorHandler(errorImpl); validator.validate(new DOMSource(document)); System.out.println("ok"); } catch (ParserConfigurationException e) { // recupération de la syntaxe du fichier xml System.err.println("ParserConfigurationException caught..."); //e.printStackTrace(); } catch (SAXException e) { // récupération de l'erreur String[] tabString = e.getMessage().split("'"); System.out.println("voici l'errueur SAXException "); for (int i=0;i<tabString.length;i++){ System.out.println(tabString[i]); } System.err.println("SAXException caught..."); e.getException(); } catch (IOException e) { System.err.println("IOException caught..."); //e.printStackTrace(); } } private class ErrorHandlerImpl extends DefaultHandler { protected String message(SAXParseException e){ String message = "Message : "+e.getMessage()+"\n"; message += "Ligne "+e.getLineNumber()+", colonne "+e.getColumnNumber()+"\n"; message += "Public id : "+e.getPublicId()+"\n"; message += "System id : "+e.getSystemId(); return message; } protected void printSAXException(SAXParseException e){ System.out.println(message(e)); if(e.getException() != null){ e.getException().printStackTrace(); } } public void warning(SAXParseException exception){ System.out.println("*** Warning ***"); printSAXException(exception); } public void error(SAXParseException exception){ System.out.println("*** Erreur ***"); printSAXException(exception); } public void fatalError(SAXParseException exception) throws SAXException{ String message = "*** Erreur fatale ***\n"; message += message(exception); SAXException se = new SAXException(message, exception); throw se; } }
merci d'avance pour l'aide
Partager