IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Validation de fichiers XML en utilisant un schéma XSD


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Points : 10
    Points
    10
    Par défaut Validation de fichiers XML en utilisant un schéma XSD
    Bonjour à tous,

    je dispose d'un fichier xsd et je voudrais faire une classe java simple afin de faire valider des fichiers xml avec ce schéma et dans le cas échéant, récupérer les erreurs.

    Il y a t-il une librairie bien particulière à utiliser, une façon standard pour faire ça et/ou un exemple de code qui pourrais m'inspirer?

    Merci d'avance

  2. #2
    Membre régulier Avatar de freelibre
    Profil pro
    Inscrit en
    Février 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 68
    Points : 76
    Points
    76
    Par défaut Utilisation de JAXB
    salut,
    tu peut Utiliser JAXB 2.0 inclu dans la JDK 1.6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    JAXBContext jc = JAXBContext.newInstance("com.jmdoudoux.test.jaxb");
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    unmarshaller.setValidating(true);
    voici un lien intéressant , cours et tutoriels pour apprendre Java : http://java.developpez.com/cours/



    Courage
    Le Partage est notre Force !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Merci freelibre. Je vais regarder ton lien.
    En attendant je suis tombé sur ce code qui m'a l'air correct. Je l'ai testé et il a l'air de fonctionner:

    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
    import java.io.IOException;
     
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
     
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import org.xml.sax.helpers.DefaultHandler;
     
     
     
     
    public class XSDValidator {
     
    	static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
     
    	static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
     
    	static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
     
    	static boolean isValid;
     
    	static {
    		isValid = false;
    	}
     
    	public static boolean validXMLWithSAX(String xmlFile, String xsdFile) {
    		isValid = true;
    		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(e.getMessage());
    					System.out
    					.println("Erreur de validation XSD - Erreur fatal");
    					isValid = false;
    				}
     
    				public void error(SAXParseException e) {
    					System.out.println(e.getMessage());
    					System.out.println("Erreur de validation XSD - Erreur");
    					isValid = false;
    				}
     
    				public void warning(SAXParseException e) {
    					System.out.println(e.getMessage());
    					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;
    	}
    Je ne fais pas trop confiance qu'au code que j'écris moi même. Mais vu la contrainte de temps que j'ai, je n'ai pas trop le choix.

    Question:
    A quoi servent les variables JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA et JAXP_SCHEMA_SOURCE dans ce code? Dois-je les remplacer par quelques choses contenu dans mon xml et/ou xsd ou c'est juste quelques chose de standard propre au fonctionnement du parseur SAX pour la validation du document?

Discussions similaires

  1. [SunOS 5.9] Valider un fichier XML sans utiliser xmllint ?
    Par Dalai-Lama dans le forum Solaris
    Réponses: 0
    Dernier message: 14/10/2013, 10h23
  2. Réponses: 0
    Dernier message: 15/06/2012, 17h55
  3. Réponses: 1
    Dernier message: 30/07/2011, 10h01
  4. [XSD]Valider un fichier XML et son schéma
    Par _Fabien dans le forum Valider
    Réponses: 6
    Dernier message: 20/03/2007, 10h28
  5. [Xml/Xsd]valider son fichier Xml avec un schéma xsd
    Par ePoX dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/02/2006, 22h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo