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 :

valider un document DOM par rapport à une DTD


Sujet :

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

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut valider un document DOM par rapport à une DTD
    Bonjour,
    je voudrais savoir si quelqu'un connait une manière de valider un document DOM par rapport à une DTD sans être obliger de générer le fichier XML qui correspond au document DOM. Ce que je voudrais c'est valider le document DOM par rapport à un modèle.
    Le logiciel que je développe construit une arborescence DOM et je voudrais pouvoir savoir à tout moment si mon document est valide par rapport au modèle que j'ai en entrée.


    Cordialement,
    Laurie

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    C'est possible !

    Regarde du côté de l'API des classes du package javax.xml (et en particulier javax.xml.validation).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
     
    Schema schema = factory.newSchema(new File("schema.xsd"));
     
    Validator validator = schema.newValidator();
     
    validator.validate(taDomSource);

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour, merci pour votre réponse.
    Cependant cette solution ne me satisfait pas pleinement car je dois aussi pouvoir traiter les modèles de type DTD.
    Si vous avez une solution, n'hésitez pas à men faire part.

    Cordialement
    Laurie

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 102
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    voici une solution. Elle ne fait pas de distinction entre schéma et DTD

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    InputStream schema = this.getClass().getResourceAsStream("schema.xsd ou DTD");
     
    public static void validerXML(String xml,InputStream xsd) throws SAXException, IOException, ParserConfigurationException, SAXParseException {
     
    		logger.debug("Validation du PLI xml");
     
    		String JAXP_SCHEMA_LANGUAGE =
    			"http://java.sun.com/xml/jaxp/properties/schemaLanguage";
    		String W3C_XML_SCHEMA =
    			"http://www.w3.org/2001/XMLSchema";
    		String JAXP_SCHEMA_SOURCE =
    			"http://java.sun.com/xml/jaxp/properties/schemaSource";
     
    //		 Suppression du BOM UTF8 s'il existe
     
    		if ((xml.charAt(0) == 0x00EF) && (xml.charAt(1) == 0x00BB) && (xml.charAt(2) == 0x00BF) ) {
     
    		xml = xml.substring(3, xml.length());
     
    		}
     
    //		Suppression du BOM UTF8 s'il existe
     
    		if ((xml.charAt(0) == 0x00EF) && (xml.charAt(1) == 0x00BB) && (xml.charAt(2) == 0x00BF) ) {
     
    			xml = xml.substring(3, xml.length());
     
    		}
     
    		InputSource inputSource = new InputSource();
     
    		StringReader strread = new StringReader(xml);
     
    		inputSource.setCharacterStream(strread); 
     
     
    		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
     
    		dbf.setIgnoringComments(true);
     
    	//	dbf.setNamespaceAware(true);
     
    		dbf.setValidating(true);
     
    		dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
     
    		dbf.setAttribute(JAXP_SCHEMA_SOURCE, xsd);
     
     
    //		Parsage du fichier XML avec DOM
     
    		DocumentBuilder db = dbf.newDocumentBuilder();
     
    		db.setErrorHandler(new ErrorHandler() {
     
    			public void fatalError(SAXParseException e) throws SAXParseException {
     
    				logger.error(e);
     
    				throw e;
     
    			}
     
     
    			public void error(SAXParseException e) throws SAXParseException {
     
    				logger.error(e);
     
    				throw e;
     
    			}
     
     
    			public void warning(SAXParseException e){
     
    				logger.error(e);
    			}
     
    		});
     
    		Document doc = db.parse(inputSource);
     
     
    	}

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/03/2007, 16h06
  2. validation d'un document XML par rapport à une DTD
    Par sebastien2222 dans le forum Valider
    Réponses: 1
    Dernier message: 03/03/2006, 15h41
  3. Initialisation d'une colonne par rapport à une autre colonne
    Par jeromesco dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/04/2005, 17h15
  4. [JCombobox] modif d'une jcombobox par rapport à une autre
    Par The Wretched dans le forum Composants
    Réponses: 2
    Dernier message: 21/03/2005, 10h35
  5. [MATH] Point par rapport à une droite
    Par teska dans le forum Mathématiques
    Réponses: 6
    Dernier message: 14/05/2003, 16h11

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