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'); |
Liens sociaux