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

Bibliothèques et frameworks PHP Discussion :

[DOM] Validation xml avec PHP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 18
    Points
    18
    Par défaut [DOM] Validation xml avec PHP
    Salut
    j'ai un fichier xml et un fichier de validation xsd, je les ai testé sur l'atelier XMLSpy et ils sont bien formés et bien valides... seulement c'est pas le cas avec mon PHP5
    Je bosse avec le DOM, et cette fonction par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function validerFichier() { 
    		$this->doc_xml->validateOnParse = true;
    		$res=$this->doc_xml->schemaValidate($this->xsd_validation);
    		if ($res)
    			return true;
    		return false;
    }
    me retourne toujours false même si le fichier est bien valide selon moi et selon XMLSpy...
    en plus du false, j'ai ce message:
    Warning: DOMDocument::schemaValidate() [function.schemaValidate]: Element machine content check failure in d:\php\www\snmp\classes\BaseXml.php on line 35
    Le seul cas ou mon fichier est valide c'est quand il contient seulement l'element racine ( <racine/>) et rien d'autre...
    j'ai testé l'encodage UTF8 et ISO-8859-1 mais ça donne le même resultat...
    une idée ?
    merci d'avance

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    C'est possible de voir le fichier xml en question ?

    Sinon la comme sa pas trop de réponse :/

    Bye

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Merci ePox
    en fait c'est surtout le schema qui est tres grand... mais les voila quand meme
    fichier xml
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <reseau>
      <machine id="1">
        <nom>fedora</nom>
        <ips>
          <ip>192.168.0.1</ip>
        </ips>
        <type>poste</type>
        <description>rien a signaler</description>
        <statistiques/>
      </machine>
    </reseau>
    le schema de validation
    Code XML : 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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    	<xs:element name="nom" type="xs:string"/>
    	<xs:element name="description" type="xs:string"/>
    	<xs:element name="type">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:enumeration value="routeur"/>
    				<xs:enumeration value="poste"/>
    				<xs:enumeration value="autre"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="ip">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:pattern value="\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="ips">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="ip" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="objet">
    		<xs:complexType>
    			<xs:sequence minOccurs="0" maxOccurs="unbounded">
    				<xs:element name="nature" type="xs:string"/>
    				<xs:element name="date" type="xs:string" minOccurs="0"/>
    				<xs:element name="valeur" type="xs:string"/>
    			</xs:sequence>
    			<xs:attribute name="id" type="xs:decimal" use="required"/>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="statistiques">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="objet" minOccurs="0" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="machine">
    		<xs:complexType>
    			<xs:all>
    				<xs:element ref="nom" minOccurs="0"/>
    				<xs:element ref="ips" minOccurs="1"/>
    				<xs:element ref="type" minOccurs="0"/>
    				<xs:element ref="description" minOccurs="0"/>
    				<xs:element ref="statistiques" minOccurs="0"/>
    			</xs:all>
    			<xs:attribute name="id" type="xs:decimal" use="required"/>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="reseau">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="machine" minOccurs="0" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>
    comme j'ai deja dit, mon fichier est valide par ce schema selon XMLSpy et non pas par PHP5

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    est tu sur qu il trouve bien ton schema ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    y a pas de doute ladessus... bon c'etait pas clair dans le premier exemple (c juste une petite partie d'une grande class) mais avec ce script par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
      $doc_xml = new DOMDocument();
      $doc_xml->load('base.xml');
      if($doc_xml->schemaValidate('reseau.xsd'))
        echo 'valide quoi !!!';
      else
      	echo 'c moche comme xml';
     ?>
    sachant que j'ai tous les fichiers dans le meme rep, j'ai tjr le message:
    Warning: DOMDocument::schemaValidate() [function.schemaValidate]: Element machine content check failure in d:\php\www\snmp\validation.php on line 4
    c moche comme xml
    je crois qu'il valide mal mon fichier car il dit que le noeud machine a un truc qui cloche...
    pourant avec XMLSPY 2004 , avec le meme fichier xml et xsd de tout a l'heur, c'est super bien valide !!!



    je ne sais pas, mais j'opte pour un bug... ce PHP5 n'est pas vraiment ce qu'on raconte de lui

  6. #6
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2004
    Messages : 97
    Points : 89
    Points
    89
    Par défaut
    Dans ton fichier XML, où est-ce que tu fais référence à ton schéma ?!
    ça devrait être :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <reseau xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="reseau.xsd">
    et non :

  7. #7
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2004
    Messages : 97
    Points : 89
    Points
    89
    Par défaut
    Pour voir si j'avais le même genre d'erreur que toi, j'ai fait un test
    (Je tourne avec php 5.1.2) avec les 3 fichiers qui suivent et ça passe très bien ("valitated OK" est affiché)

    coursschema.xsd
    Code XML : 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
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="table">
    	<xsd:complexType>
    		<xsd:sequence maxOccurs="unbounded">
    			<xsd:element name="cours">
    				<xsd:complexType>
    					<xsd:sequence>
    						<xsd:element name="num_cours" type="xsd:short" />
    						<xsd:element name="nom" type="xsd:string" minOccurs="0" />
    						<xsd:element name="nbheures" type="xsd:short" minOccurs="0" />
    						<xsd:element name="annee" type="xsd:short" minOccurs="0" />
    					</xsd:sequence>
    				</xsd:complexType>
    			</xsd:element>
    		</xsd:sequence>
    	</xsd:complexType>
    </xsd:element>
    </xsd:schema>

    cours.xml
    Code XML : 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
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="coursschema.xsd">
    <cours>
    <num_cours>1</num_cours>
    <nom>Réseau</nom>
    <nbheures>15</nbheures>
    <annee>1</annee>
    </cours><cours>
    <num_cours>2</num_cours>
    <nom>Sgbd</nom>
    <nbheures>30</nbheures>
    <annee>1</annee>
    </cours><cours>
    <num_cours>3</num_cours>
    <nom>Programmation</nom>
    <nbheures>15</nbheures>
    <annee>1</annee>
    </cours><cours>
    <num_cours>4</num_cours>
    <nom>Sgbd</nom>
    <nbheures>30</nbheures>
    <annee>2</annee>
    </cours><cours>
    <num_cours>5</num_cours>
    <nom>Analyse</nom>
    <nbheures>60</nbheures>
    <annee>2</annee>
    </cours>
    </table>

    test.php

    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
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>xml-xsd</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <?php
    $xml = new DOMDocument();
    $xml->load('cours.xml');
    if ($xml->schemaValidate("coursschema.xsd")) {
         echo "Validated OK"; 
    } else { 
         echo "Validate FAILED"; 
    } 
    ?>
    </body>
    </html>

Discussions similaires

  1. [DOM] Manipulation de fichier XML avec PHP
    Par CIFQ_Drew dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 04/05/2008, 22h09
  2. [DOM] création de fichier XML avec PHP
    Par fleuveblanc dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/12/2007, 17h36
  3. [DOM] création de fichier XML avec PHP
    Par cortex007 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 09/12/2007, 11h31
  4. [DOM XML][XSLT] Création d'un document XML avec PHP
    Par ToxiZz dans le forum Bibliothèques et frameworks
    Réponses: 21
    Dernier message: 16/01/2006, 17h44
  5. [XSD][xerces] validation xml avec un xsd
    Par chand_bing dans le forum Valider
    Réponses: 2
    Dernier message: 05/02/2004, 20h21

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