espace de nom dans un xml

espace de nom dans un xml - PHP - Programmation

Marsh Posté le 19-09-2014 à 15:43:44    

Bonjour,
 
J'ai un problème pour récupérer des valeurs avec des espaces de nom :
Je veux récupérer la valeur de la balise <fr> qui n'est pas dans le même ns que sa balise mère...
 
mon fichier XML à parser :
 

Code :
  1. <object name="17RES" jcr:uuid="toto">
  2.   <cdt:InformationsGenerales>
  3.      <cdt:NomAnnonce>
  4.          <fr>Le Miramar</fr>
  5.          <en>Le Miramar</en>
  6.          <de>Le Miramar</de>
  7.          <it>Le Miramar</it>
  8.      </cdt:NomAnnonce>
  9. <cdt:InformationsGenerales>
  10. [..]


 
mon code :

Code :
  1. $xml = simplexml_load_file($path);
  2. foreach ($xml->object as $item) {
  3. //recuperation des ns  
  4. $namespaces = $item->getNameSpaces(true);
  5. $cdtInfo = $item->children($namespaces['cdt']);
  6.         $info=$cdtInfo->InformationsGenerales;
  7.         $NomAnnonce=$info->NomAnnonce;
  8. }


 
quand je fais un print_r sur $NomAnnonce, je n'ai aucun contenu :
SimpleXMLElement Object
(
)
 
Quelle méthode dois-je utiliser pour atteindre la balise fr?
 
merci

Reply

Marsh Posté le 19-09-2014 à 15:43:44   

Reply

Marsh Posté le 19-09-2014 à 16:08:30    

RTFM : http://php.net/manual/en/function. [...] d-file.php :o
 
4ème paramètre de simplexml_load_file() : $ns...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 19-09-2014 à 16:39:25    

merci, je n'ai pas pensé à regarder les paramètres de la fonction simplexml_load.
mais ça ne résout pas mon problème, au mieux ça m'économise 2 lignes de code, mais ne fait pas pour autant apparaitre le contenu de la balise NomAnnonce sans doute parceque justement elle ne possede pas d'espace de nom.  
 
j'ai modifié la ligne 1 comme ci-dessous :
$xml = simplexml_load_file($path,null,null,"cdt",TRUE);
 
ce qui provoque un warning :
 main() [function.main]: Cannot assign to an array of nodes (duplicate subnodes or attr detected)
 
Le xml n'est pas valide?

Reply

Marsh Posté le 19-09-2014 à 16:53:20    

Je vient juste de réaliser : "cdt:" n'est en aucun cas un namespace :/ Un namespace est déclaré avec l'attribut "xmlns" dans une balise...
 
"cdt:InformationsGenerales" est donc le nom d'une balise, tout simplement, sans namespace. :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 19-09-2014 à 17:12:48    

non, non, c'est bien un ns, declaré bien comme il faut dans l'entete du xml (que je n'ai pas mis ds le code), d'ailleurs à la ligne 6 dans ma version, je demande bien de récuperer un ns "cdt".  
 
L'accès aux autres balises avec le ns "cdt" fonctionne bien (que se soit avec ma méthode ou la tienne), mais dès que j'essaye d'acceder aux balises filles qui n'ont, elles, pas de ns, ça ne renvoie rien!
 
j'ai passé mon aprem dessus, et je crois que je vais faire le bourrin en enlevant tous les ns avec un regex, voir un str_replace....


Message édité par golumest le 19-09-2014 à 17:14:55
Reply

Marsh Posté le 19-09-2014 à 17:14:30    

Commence alors par poster ton xml en entier ou au moins une partie suffisamment significative pour qu'on puisse t'aider ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 19-09-2014 à 17:18:28    

Ligne 7, j'aurais fait :
$info=$cdtInfo->{'cdt:InformationsGenerales'};
 
Tu peux faire aussi un var_dump($cdtInfo); pour voir ce que t'as dedans.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-09-2014 à 10:49:05    

merci de ton aide, je vais essayé avec ta methode, mais avec la mienne le print_r renvoie bien les balises avec le ns, mais pas les balises filles <fr><en><it>

Reply

Marsh Posté le 20-09-2014 à 12:15:20    

C'est peut-être simplexml qui a un bug... Essaye avec la lib DOM de PHP pour voir si t'as le même pb.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-09-2014 à 20:55:24    

bug ?

Reply

Marsh Posté le 21-09-2014 à 20:55:24   

Reply

Marsh Posté le 22-09-2014 à 17:03:18    

merci de votre aide, j'ai finalement opté pour la solution bourrin en enlevant les espaces de noms puis en parsant classiquement le fichier !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed