[Java]Validation xml par un schema xsd
lewis
-
Zora -
Zora -
Bonjour,
Je developpe un programme java qui permet de creer un fichier xml. Cependant j'aimerais que ce fichier xml soit valide par rapport à schema xsd pour cela j'ai écris une classe mais qui malheuresement ne fonctionne pas. Je précise que le fichier xml contient des namespaces et qu'il ne contient pas de lien xsi. Voila je poste le code (trouver sur le net et légèrement modifié) pour savoir s'il y a une erreur :
public static boolean validXML(String xmlFile, String xsdFile) {
isValid = true;
System.out.println(xmlFile+" *** "+xsdFile);
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
spf.setValidating(true);
SAXParser sp = spf.newSAXParser();
sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
sp.setProperty(JAXP_SCHEMA_SOURCE, xsdFile);
sp.parse(xmlFile, new DefaultHandler(){
public void fatalError(SAXParseException e) {
System.out.println("Erreur de validation XSD - Erreur fatal");
isValid = false;
}
public void error(SAXParseException e) {
System.out.println("Erreur de validation XSD - Erreur");
isValid = false;
}
public void warning(SAXParseException e) {
System.out.println("Erreur de validation XSD - Warning");
isValid = false;
}
});
}catch (SAXException se) {
System.out.println(se);
return false;
}catch (ParserConfigurationException pce){
System.out.println(pce);
return false;
}catch (IOException ioe){
System.out.println(ioe);
return false;
}
return isValid;
}
PS : si vous connaissez une autre solution je suis preneur ;)
Je developpe un programme java qui permet de creer un fichier xml. Cependant j'aimerais que ce fichier xml soit valide par rapport à schema xsd pour cela j'ai écris une classe mais qui malheuresement ne fonctionne pas. Je précise que le fichier xml contient des namespaces et qu'il ne contient pas de lien xsi. Voila je poste le code (trouver sur le net et légèrement modifié) pour savoir s'il y a une erreur :
public static boolean validXML(String xmlFile, String xsdFile) {
isValid = true;
System.out.println(xmlFile+" *** "+xsdFile);
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
spf.setValidating(true);
SAXParser sp = spf.newSAXParser();
sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
sp.setProperty(JAXP_SCHEMA_SOURCE, xsdFile);
sp.parse(xmlFile, new DefaultHandler(){
public void fatalError(SAXParseException e) {
System.out.println("Erreur de validation XSD - Erreur fatal");
isValid = false;
}
public void error(SAXParseException e) {
System.out.println("Erreur de validation XSD - Erreur");
isValid = false;
}
public void warning(SAXParseException e) {
System.out.println("Erreur de validation XSD - Warning");
isValid = false;
}
});
}catch (SAXException se) {
System.out.println(se);
return false;
}catch (ParserConfigurationException pce){
System.out.println(pce);
return false;
}catch (IOException ioe){
System.out.println(ioe);
return false;
}
return isValid;
}
PS : si vous connaissez une autre solution je suis preneur ;)
A voir également:
- [Java]Validation xml par un schema xsd
- Jeux java itel - Télécharger - Jeux vidéo
- Schéma téléphone oublié - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Xml viewer - Télécharger - Édition & Programmation
- Waptrick java voiture - Télécharger - Jeux vidéo
3 réponses
Bonjour,
Je sais que ça fait un bail mais ne sais on jamais ^^
J'ai fais le même genre de chose que toi et voici brièvement mon code (qui fonctionne) :
En espérant que ça puisse un jour aider.
Je sais que ça fait un bail mais ne sais on jamais ^^
J'ai fais le même genre de chose que toi et voici brièvement mon code (qui fonctionne) :
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null; dbfactory.setValidating(true); // --- Attribution du schéma de validation dbfactory.setAttribute( JAXP_SCHEMA_LANGUAGE, "http://www.w3.org/2001/XMLSchema" ); // --- Le chemin d'accès à mon fichier xsd se trouve dans un fichier de config File f = new File( getConfig().getXsdPath() ); dbfactory.setAttribute( JAXP_SCHEMA_SOURCE, f ); db = dbfactory.newDocumentBuilder(); // --- J'ai un error handler pour filtrer certain type d'erreur que je ne considère pas comme de réelles erreurs. // --- Ce n'est donc pas obligatoire myHandler = new XmlValiderHandlerManager(); db.setErrorHandler( myHandler ); // --- Entity resolver pour passer outre les messages d'erreur sur les entity connu de mon process db.setEntityResolver( new NplEntityResolver(getConfig().getRoot()) ); // --- Parsing du fichier xml en entrée db.parse(new File(myRootDirectory.concat(File.separator).concat(myCurrentInputFile)));
En espérant que ça puisse un jour aider.