Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Membre à l'essai
    Inscrit en
    décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 49
    Points : 20
    Points
    20

    Par défaut [XSD]Validation avec deux schémas?

    Bonjour, j'ai un fichier XML (command.xml) qui possède deux schémas xsd
    (env.xsd et mess.xsd).
    Voici un peu de code de env.xsd:

    Code :
    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
    <?xml version="1.0" encoding="UTF-8"?>
        <ENVELOPPE xmlns="urn:x-csrp:fr.csrp.protocole:env" Nature_Action="REQ_EMISSION" >
     
          <ENTETE>
            <EMETTEUR Nature="OF" Id="test" Adresse="test" />
            <RECEPTEUR Nature="RE" Code="11" Id="A1" Adresse="test5" />
            <REF_MESSAGE>
              M050215120338q191
            </REF_MESSAGE>
            <EN_REPONSE_A>
            	TEST1
            </EN_REPONSE_A>
          </ENTETE>
          <CORPS>
            <MESSAGExmlns="urn:x-csrp:fr.csrp.protocole:mess">
              <ENTETE>
                <EMETTEUR Id_Client="test"/>
                <DESTINATAIRE Code_Societe="11" Id_Societe="A1"/>
              </ENTETE>
              <CORPS>
                <COMMANDE Ref_Cde_Client="00000" Commentaire_General="C1ZO">
                  <NORMALE>
                    <LIGNE_N Num_Ligne="1" Type_Codification="1111" Code_Produit="00115" Quantite="16"/>
                    <LIGNE_N Num_Ligne="2" Type_Codification="1002" Code_Produit="00011" Quantite="22"/>
     
                  </NORMALE>
                </COMMANDE>
                <COMMANDE Ref_Cde_Client="123456" Commentaire_General="TEST">
                  <NORMALE>
                    <LIGNE_N Num_Ligne="1" Type_Codification="CODE1" Code_Produit="0000001" Designation="Produit Test 1" Quantite="1"/>
                    <LIGNE_N Num_Ligne="2" Type_Codification="CODE2" Code_Produit="0000002" Designation="Produit Test 2" Quantite="2"/>
                    <LIGNE_N Num_Ligne="3" Type_Codification="CODE3" Code_Produit="0000003" Designation="Produit Test 3" Quantite="3"/>
                    <LIGNE_N Num_Ligne="4" Type_Codification="CODE4" Code_Produit="0000004" Designation="Produit Test 4" Quantite="4"/>
                  </NORMALE>
                </COMMANDE>
              </CORPS>
            </MESSAGE>
          </CORPS>
        </ENVELOPPE>
    En fait le env.xsd traite ENVELOPPE et ses noeuds entete recepteur et mess.xsd traite tous les noeuds de message.

    Je tiens à dire que ce n'est pas moi qui est créer ces fichiers.

    Le problème c'est que ni env.xsd ne fais appel à mess.xsd ni mess.xsd ne fais appel à env.xsd.

    Alors pour la validation que je dois faire via php5 je bloque ...
    Une idée?

  2. #2
    Expert Confirmé Sénior
    Avatar de GrandFather
    Inscrit en
    mai 2004
    Messages
    4 566
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : mai 2004
    Messages : 4 566
    Points : 6 339
    Points
    6 339

    Par défaut

    Tu n'as pas d'autre choix que de faire un <xsd:import> d'un schéma dans l'autre, donc de modifier un de tes schémas.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre à l'essai
    Inscrit en
    décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 49
    Points : 20
    Points
    20

    Par défaut

    Ok mais apparemment il n'y a rien à rajouter, la personne qui a créer cela a dit que tout est dedans rien à rajouter.

    Je débute en XML alors peut être qu'il y a un autre moyen mais là je sèche.
    Merci quand même de ta réponse.

  4. #4
    Expert Confirmé Sénior
    Avatar de GrandFather
    Inscrit en
    mai 2004
    Messages
    4 566
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : mai 2004
    Messages : 4 566
    Points : 6 339
    Points
    6 339

    Par défaut

    Toutes mes excuses, j'ai répondu trop vite avant de m'apercevoir que tes deux schémas concernaient des espaces de noms différents.

    Il faut que dans l'élément racine de ton document XML tu déclares à quel espace de nom correspond chaque schéma dans l'attribut schemaLocation, en alternant espaces de nom et schémas de la façon suivante :
    Code :
    1
    2
    3
    4
    5
    <ENVELOPPE 
      xmlns="urn:x-csrp:fr.csrp.protocole:env" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="urn:x-csrp:fr.csrp.protocole:env env.xsd urn:x-csrp:fr.csrp.protocole:mess mess.xsd"
      Nature_Action="REQ_EMISSION" >
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre à l'essai
    Inscrit en
    décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 49
    Points : 20
    Points
    20

    Par défaut

    Je vais essayer.

  6. #6
    Invité régulier
    Inscrit en
    juillet 2005
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 39
    Points : 5
    Points
    5

    Par défaut

    Bonjour,

    Je travaille sur la suite du projet commencé par Cuber, et je me retrouve confronté au même problème.

    Le projet se déroule en 3 étapes :

    1) Réception du fichier XML par le flux HTTP
    2) Analyse et taitement du fichier
    3) Retour de la réponse, touours par HTTP

    Voici le fichier que je reçois :

    Code :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <CSRP_ENVELOPPE xmlns="urn:x-csrp:fr.csrp.protocole:enveloppe" Nature_Action="REQ_EMISSION" Version_Protocole="1.0.0.0" Id_Logiciel="WinPharma" Version_Logiciel="5.3.31" Usage="P">
    <ENTETE>
    <EMETTEUR Nature="OF" Code="00" Id="123456" Adresse="17 chauss&#39264;de la madeleine  44000 NANTES"/>
    <RECEPTEUR Nature="RE" Code="13" Id="123456" Adresse="TRALALA"/>
    <REF_MESSAGE>7D509140A8C6057</REF_MESSAGE>
    <DATE>2005-09-20T16:00:06</DATE>
    </ENTETE>
    <CORPS>
    <MESSAGE_OFFICINE xmlns="urn:x-csrp:fr.csrp.protocole:message">
    <ENTETE>
    <EMETTEUR Nature_Partenaire="OF" Id_Client="123456"/>
    <DESTINATAIRE Code_Societe="RE" Id_Societe="123456"/>
    </ENTETE>
    <CORPS>
    <COMMANDE Ref_Cde_Client="4020">
    <NORMALE>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3095969" Quantite="2"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3096420" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3098608" Quantite="3"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3102250" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3105308" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3107690" Quantite="2"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3107709" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3113443" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3129332" Quantite="1"/>
    </NORMALE>
    </COMMANDE>
    </CORPS>
    </MESSAGE_OFFICINE>
    </CORPS>
    </CSRP_ENVELOPPE>
    Je fais appel à la librairie DOM-XML pour récupérer les informations dont j'ai besoin.


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?
     
    $fichier = 'commande.xml';
     
    //Je commence par instancier ma classe
    $dom_=new DOMDocument();
     
    //Je charge le fichier
    $dom_->load($fichier);
     
    /**** JUSQ'ICI TOUT VA BIEN ****/
     
    // Je parcours le fichier
    $xpath = new DOMXpath($dom);
     
    // Je définis mon chemin
    $res_req= $xpath->query('/CSRP_ENVELOPPE/CORPS/MESSAGE_OFFICINE/ENTETE/EMETTEUR');
     
    // Je récupère l'attribut
    $Id_Client =$res_req->item(0)->getAttribute('Id_Client');
     
    ?>
    A l'exécution, voici l'erreur retournée :

    Fatal error: Call to a member function getAttribute() on a non-object in c:\Inetpub\wwwroot\test_xml.php on line 74

    Après plusieurs arrachages de cheveux, je parviens à récupérer l'attribut mais en modifiant le fichier XML de départ comme GrandFather le préconisait.

    Voici le fichier XML modifié (seules les balises <CSRP_ENVELOPPE> et <MESSAGE_OFFICINE> sont concernées) :

    Code :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <CSRP_ENVELOPPE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Nature_Action="REQ_EMISSION" Version_Protocole="1.0.0.0" Id_Logiciel="WinPharma" Version_Logiciel="5.3.12" Usage="P" xsi:noNamespaceSchemaLocation="E:\test_jeremy\integration\valid.xsd">
    <ENTETE>
    <EMETTEUR Nature="OF" Code="00" Id="123456" Adresse="17 chauss&#39264;de la madeleine  44000 NANTES"/>
    <RECEPTEUR Nature="RE" Code="13" Id="123456" Adresse="TRALALA"/>
    <REF_MESSAGE>7D509140A8C6057</REF_MESSAGE>
    <DATE>2005-09-20T16:00:06</DATE>
    </ENTETE>
    <CORPS>
    <MESSAGE_OFFICINE>
    <ENTETE>
    <EMETTEUR Nature_Partenaire="OF" Id_Client="123456"/>
    <DESTINATAIRE Code_Societe="RE" Id_Societe="123456"/>
    </ENTETE>
    <CORPS>
    <COMMANDE Ref_Cde_Client="4020">
    <NORMALE>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3095969" Quantite="2"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3096420" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3098608" Quantite="3"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3102250" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3105308" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3107690" Quantite="2"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3107709" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3113443" Quantite="1"/>
    <LIGNE_N Num_Ligne="1" Type_Codification="CIP39" Code_Produit="3129332" Quantite="1"/>
    </NORMALE>
    </COMMANDE>
    </CORPS>
    </MESSAGE_OFFICINE>
    </CORPS>
    </CSRP_ENVELOPPE>
    Le problème c'est que je ne suis pas censé modifier le fichier XML que je reçois, et je ne vois même pas pourquoi ça pose un problème dans la récupération de l'attribut?

    Merci beaucoup de vos réponses!

    ps : comme Cuber je ne suis malheureusement pas un spécialiste du XML...

  7. #7
    Expert Confirmé Sénior
    Avatar de GrandFather
    Inscrit en
    mai 2004
    Messages
    4 566
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : mai 2004
    Messages : 4 566
    Points : 6 339
    Points
    6 339

    Par défaut

    Bonjour,

    peux-tu donner le <CSRP_ENVELOPPE> original ?
    A priori, cela n'a rien à voir avec les W3C XML Schemas : ils ne sont pas implémentés dans PHP 5.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  8. #8
    Invité régulier
    Inscrit en
    juillet 2005
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 39
    Points : 5
    Points
    5

    Par défaut

    peux-tu donner le <CSRP_ENVELOPPE> original ?
    Je ne suis pas sûr de bien saisir.

    Le fichier original c'est celui que je reçois (au format XML); c'est également celui que j'ai modifié pour récupérer l'attribut souhaité.

    Dans mon dernier post tu peux voir ces deux fichiers.

    Par contre si tu parles des fichiers XSD de validation les voici :

    Fichier csrp-enveloppe-specv4.8.xsd :

    Code :
    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- edited with XMLSPY v5 rel. 2 U (http://www.xmlspy.com)  -->
    <xsd:schema targetNamespace="urn:x-csrp:fr.csrp.protocole:enveloppe" xmlns="urn:x-csrp:fr.csrp.protocole:enveloppe" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    	<!--Schema enveloppe conforme aux spécifications Pharma-ML v4.8-->
    	<!--Définition des éléments globaux-->
    	<xsd:element name="CSRP_ENVELOPPE">
    		<xsd:complexType>
    			<xsd:sequence>
    				<xsd:element name="ENTETE">
    					<xsd:complexType>
    						<xsd:sequence>
    							<xsd:element name="EMETTEUR">
    								<xsd:complexType>
    									<xsd:attributeGroup ref="attgPartenaire"/>
    								</xsd:complexType>
    							</xsd:element>
    							<xsd:element name="RECEPTEUR">
    								<xsd:complexType>
    									<xsd:attributeGroup ref="attgPartenaire"/>
    								</xsd:complexType>
    							</xsd:element>
    							<xsd:element name="REF_MESSAGE" type="stMessageId"/>
    							<xsd:element name="EN_REPONSE_A" type="stMessageId" minOccurs="0"/>
    							<xsd:element name="DATE" minOccurs="0">
    								<xsd:annotation>
    									<xsd:documentation>date et heure d'émission du message à la précision seconde</xsd:documentation>
    								</xsd:annotation>
    								<xsd:simpleType>
    									<xsd:restriction base="xsd:dateTime">
    										<xsd:pattern value=".+T[^Z+-\.]+"/>
    									</xsd:restriction>
    								</xsd:simpleType>
    							</xsd:element>
    						</xsd:sequence>
    					</xsd:complexType>
    				</xsd:element>
    				<xsd:element name="CORPS">
    					<xsd:complexType>
    						<xsd:choice>
    							<xsd:element name="ERREUR">
    								<xsd:complexType>
    									<xsd:attribute name="Description_libre" use="required">
    										<xsd:simpleType>
    											<xsd:restriction base="xsd:string">
    												<xsd:maxLength value="128"/>
    												<xsd:minLength value="1"/>
    											</xsd:restriction>
    										</xsd:simpleType>
    									</xsd:attribute>
    								</xsd:complexType>
    							</xsd:element>
    							<xsd:element name="ACTION">
    								<xsd:annotation>
    									<xsd:documentation>Action de cinématique : ACQUITTEMENT, VIDAGE ou FIN_SERVICE</xsd:documentation>
    								</xsd:annotation>
    								<xsd:simpleType>
    									<xsd:restriction base="xsd:NMTOKEN">
    										<xsd:enumeration value="ACQUITTEMENT"/>
    										<xsd:enumeration value="VIDAGE"/>
    										<xsd:enumeration value="FIN_SERVICE"/>
    									</xsd:restriction>
    								</xsd:simpleType>
    							</xsd:element>
    							<xsd:any namespace="##other" processContents="strict"/>
    						</xsd:choice>
    						<xsd:anyAttribute namespace="##other" processContents="strict"/>
    					</xsd:complexType>
    				</xsd:element>
    			</xsd:sequence>
    			<xsd:attribute name="Version_Protocole" use="required">
    				<xsd:simpleType>
    					<xsd:restriction base="xsd:string">
    						<xsd:pattern value="\d{1,2}\.\d{1,2}\.\d{1,2}\.\d{1,2}"/>
    					</xsd:restriction>
    				</xsd:simpleType>
    			</xsd:attribute>
    			<xsd:attribute name="Nature_Action" use="required">
    				<xsd:simpleType>
    					<xsd:restriction base="xsd:string">
    						<xsd:enumeration value="REQ_EMISSION"/>
    						<xsd:enumeration value="REQ_RECEPTION"/>
    						<xsd:enumeration value="REP_EMISSION"/>
    						<xsd:enumeration value="REP_RECEPTION"/>
    					</xsd:restriction>
    				</xsd:simpleType>
    			</xsd:attribute>
    			<xsd:attribute name="Id_Logiciel" use="required">
    				<xsd:simpleType>
    					<xsd:restriction base="xsd:normalizedString">
    						<xsd:minLength value="1"/>
    						<xsd:maxLength value="30"/>
    					</xsd:restriction>
    				</xsd:simpleType>
    			</xsd:attribute>
    			<xsd:attribute name="Version_Logiciel" use="required">
    				<xsd:simpleType>
    					<xsd:restriction base="xsd:normalizedString">
    						<xsd:minLength value="1"/>
    						<xsd:maxLength value="10"/>
    					</xsd:restriction>
    				</xsd:simpleType>
    			</xsd:attribute>
    			<xsd:attribute name="Usage" use="required">
    				<xsd:annotation>
    					<xsd:documentation>Indique nature production ou test du message</xsd:documentation>
    				</xsd:annotation>
    				<xsd:simpleType>
    					<xsd:restriction base="xsd:NMTOKEN">
    						<xsd:length value="1"/>
    					</xsd:restriction>
    				</xsd:simpleType>
    			</xsd:attribute>
    		</xsd:complexType>
    	</xsd:element>
    	<!--Définition des types simples-->
    	<xsd:simpleType name="stMessageId">
    		<xsd:restriction base="xsd:normalizedString">
    			<xsd:minLength value="1"/>
    			<xsd:maxLength value="20"/>
    		</xsd:restriction>
    	</xsd:simpleType>
    	<!--Définition des groupes d'attribut-->
    	<xsd:attributeGroup name="attgPartenaire">
    		<xsd:attribute name="Nature" use="required">
    			<xsd:simpleType>
    				<xsd:restriction base="xsd:NMTOKEN">
    					<xsd:enumeration value="RE"/>
    					<xsd:enumeration value="OF"/>
    				</xsd:restriction>
    			</xsd:simpleType>
    		</xsd:attribute>
    		<xsd:attribute name="Code" use="optional" default="00">
    			<xsd:annotation>
    				<xsd:documentation>Obligatoire si nature partenaire
    est RE (répartiteur), la valeur par défaut est utilisée pour partenaire OF (Officine)</xsd:documentation>
    			</xsd:annotation>
    			<xsd:simpleType>
    				<xsd:restriction base="xsd:NMTOKEN">
    					<xsd:length value="2"/>
    				</xsd:restriction>
    			</xsd:simpleType>
    		</xsd:attribute>
    		<xsd:attribute name="Id" use="required">
    			<xsd:simpleType>
    				<xsd:restriction base="xsd:NMTOKEN">
    					<xsd:minLength value="1"/>
    					<xsd:maxLength value="20"/>
    				</xsd:restriction>
    			</xsd:simpleType>
    		</xsd:attribute>
    		<xsd:attribute name="Adresse" use="required">
    			<xsd:annotation>
    				<xsd:documentation>Nom et adresse du partenaire</xsd:documentation>
    			</xsd:annotation>
    			<xsd:simpleType>
    				<xsd:restriction base="xsd:string">
    					<xsd:minLength value="1"/>
    					<xsd:maxLength value="128"/>
    				</xsd:restriction>
    			</xsd:simpleType>
    		</xsd:attribute>
    	</xsd:attributeGroup>
    </xsd:schema>
    Fichier csrp-message-specv4.8.xsd :

    euh... si tu le veux vraiment dis le moi car il est 20 fois plus gros que le précédent!

    Merci de ton aide.

  9. #9
    Expert Confirmé Sénior
    Avatar de GrandFather
    Inscrit en
    mai 2004
    Messages
    4 566
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : mai 2004
    Messages : 4 566
    Points : 6 339
    Points
    6 339

    Par défaut

    Au temps pour moi, j'ai pédalé un peu dans la semoule...

    Cela dit, je confirme : le problème ne vient pas des W3C XML Schemas, PHP 5 ne les supporte pas. L'ajout des lignes suivantes n'est donc pas ce qui t'a permis de récupérer ton attribut (tu peux les retirer, ça ne changera rien) :
    Code :
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:\test_jeremy\integration\valid.xsd"
    Ce qui a "miraculeusement" réglé le problème est que tu as retiré du CSRP_ENVELOPPE du XML original cet attribut :
    Code :
    xmlns="urn:x-csrp:fr.csrp.protocole:enveloppe"
    Cet attribut signale que toutes les balises filles de la balise où est placé cet attribut, ainsi qu'elle-même appartiennent à cet espace de nom dit par défaut, ce dont il faut tenir compte dans ta requête XPath. Idem pour l'espace de nom de la balise MESSAGE_OFFICINE. Tous les espaces de nom que tu emploies dans ta requête XPath doivent être déclarés au préalable à l'aide de la méthode registerNamespace().
    Ca devrait donner le code PHP suivant (à utiliser avec le XML non modifié) :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Je parcours le fichier 
    $xpath = new DOMXpath($dom); 
     
    // Je déclare les espaces de nom
    $xpath->registerNamespace('x', 'urn:x-csrp:fr.csrp.protocole:enveloppe');
    $xpath->registerNamespace('y', 'urn:x-csrp:fr.csrp.protocole:message');
     
    // Je définis mon chemin, en utilisant les préfixes x et y pour désigner les espaces de nom auquel chaque balise appartient 
    $res_req= $xpath->query('/x:CSRP_ENVELOPPE/x:CORPS/y:MESSAGE_OFFICINE/y:ENTETE/y:EMETTEUR'); 
     
    // Je récupère l'attribut 
    $Id_Client =$res_req->item(0)->getAttribute('Id_Client');
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  10. #10
    Membre à l'essai
    Inscrit en
    décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 49
    Points : 20
    Points
    20

    Par défaut

    Ah pauvre cilv1, il reprend mon projet....
    Si seulement tu n'était pas obligé de passer par PHP.
    Sur ce bon courage, j'espère que la partoe de création de réponse fonctionne bien elle.

  11. #11
    Invité régulier
    Inscrit en
    juillet 2005
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 39
    Points : 5
    Points
    5

    Par défaut

    Merci beaucoup pour ton aide et tes explications!

    J'ai essayé et en effet tu avais raison : c'est bien en déclarant les espaces de noms à l'aide de la méthode registerNamespace() que j'ai pu récupérer les informations nécessaires à mon projet.

    Par contre je n'ai pas l'impression que mon fichier soit réellement validé par les schémas XSD, mais je peux me tromper : un petit test après modification du nom d'une balise ne me retourne aucune erreur!

    Enfin bon normalement je n'ai pas besoin de valider le fichier que je reçois mais c'est toujours mieux de contrôler l'information...

    ps : je viens de voir ton post cuber, merci pour avoir entamé la discussion avec GrandFather grand maître du XML ! Cela m'a été d'une grande aide... bon courage pour la suite!

Offres d'emploi IT
Ingénieur Test & Fton-End H/F
CDD CDI
CDS SOFT, Pôle Informatique du groupe STUDIEL - Provence Alpes Côte d'Azur - Sophia Antipolis (06)
Parue le 15/04/2014
DEVELOPPEUR C++ QT H/F
CDD
CDS SOFT, Pôle Informatique du groupe STUDIEL - Provence Alpes Côte d'Azur - La Garde (83)
Parue le 14/05/2014
Développeur Java ESB H/F
CDD CDI
CDS SOFT, Pôle Informatique du groupe STUDIEL - Provence Alpes Côte d'Azur - Sophia Antipolis (06)
Parue le 15/04/2014

Voir plus d'offres Voir la carte des offres IT

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •