Salut,

Pour valider un document XML avec un schéma XML, je me suis inspiré d'un code que l'on peut retrouver un peu partout sur Internet :
Code java : 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
private boolean isXmlConformeAuSchema(InputStream xml, InputStream xsd) {
	Schema schema;
	DOMSource source;
 
	try {
		SchemaFactory schemaFact = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
		schema = schemaFact.newSchema(new StreamSource(xsd));
 
		DocumentBuilderFactory builderFact = DocumentBuilderFactory.newInstance();
		builderFact.setNamespaceAware(true);
		DocumentBuilder builder = builderFact.newDocumentBuilder();
 
		Document document = builder.parse(xml);
 
		source = new DOMSource(document);
	} catch (SAXException e) {
		System.out.println("Le schéma n'est pas valide : " + e.getMessage());
		return false;
	} catch (ParserConfigurationException e) {
		e.printStackTrace();
		return false;
	} catch (IOException e) {
		System.out.println("Erreur de lecture du schéma : " + e.getMessage());
		return false;
	}
 
	Validator validator = schema.newValidator();
 
	try {
		validator.validate(source);
	} catch (SAXException e) {
		System.out.println("Le document XML ne respecte pas le schéma : " + e.getMessage());
		return false;
	} catch (IOException e) {
		System.out.println("Erreur de lecture du document XML : " + e.getMessage());
		return false;
	}
 
	return true;
}

J'ai testé le validateur :
  • Quand le document XML est conforme au schéma, la validation passe ;
  • Quand le document XML n'est pas conforme (en changeant le nom d'une balise par exemple), la validation passe quand même.


Savez-vous d'où vient le problème ?

Merci !