Hr-xml et PHP

Résolu
victoires Messages postés 141 Statut Membre -  
victoires Messages postés 141 Statut Membre -
Bonjour,

J'ai un fichier XML normé hr-xml que je souhaite lire en php pour récupérer les données, certains balises ne sont pas récupérables.
Exemple contenu :
<PersonName>
<oa:GivenName>TOTO</oa:GivenName>
<FamilyName>TAT</FamilyName>
</PersonName>


code php :
$xml = simplexml_load_file($fichier); // objet PHP


l'objet PHP donne :
[PersonName] => SimpleXMLElement Object
(
[FamilyName] => Dupond
)


Ma question concerne la balise GivenName , est ce possible de le récupérer ?

Merci beaucoup d'avance

1 réponse

  1. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    Une solution possible en utilisant la méthode getNamespaces :
    https://www.php.net/manual/fr/simplexmlelement.getnamespaces.php

    Bonne journée
    0
    1. victoires Messages postés 141 Statut Membre
       
      Bonjour,

      merci beaucoup, j'ai réussi à récupérer la valeur de GivenName :
      J'ai récupérer les namespaces :
      $namespace = $xml->getDocNamespaces(true);

      puis j'ai récupérer la valeur :
      $prenom = $etatCivil->PersonName->children($namespace['oa']);


      j'ai un petit souci avec d'autres valeurs de types, par exemple :
         <UserArea>
      <pe:CentresInteret>
      <CentreInteret>VTT</CentreInteret>
      <CentreInteret>Tennis</CentreInteret>
      <CentreInteret>Badminton</CentreInteret>
      <CentreInteret>Golf</CentreInteret>
      <CentreInteret>Basket</CentreInteret>
      </pe:CentresInteret>
      <pe:Langues>
      <Langue>
      <id>EN</id>
      <InformationsComplementaires>complément</InformationsComplementaires>
      <Niveau>Très bon</Niveau>
      </Langue>
      <Langue>
      <id>DE</id>
      <Niveau>Correct</Niveau>
      </Langue>
      </pe:Langues>
      </UserArea>


      je voulais récupérer les valeurs des langues et centres d'interets

      voici mon code :
      $langues = $xml->CandidateProfile->UserArea;
      $child = $langues->children($namespace['pe']);
      echo "<pre>";
      var_dump($child->Langues);
      echo "</pre>";

      foreach($child->Langues as $key => $centres) {
      var_dump($key);
      }


      le $key retourne un objet vide
      object(SimpleXMLElement)#42 (0) {
      }


      avez-vous une idée comment bien récupérer ces valeurs ? Merci beaucoup d'avance

      Bonne journée
      0
    2. Pitet Messages postés 2845 Statut Membre 530
       
      Il n'y a pas de clé lors d'un parcours d'un objet SimpleXMLElement car il ne s'agit pas d'un tableau php.
      Pour l'instant tu ne récupères que les langues ($child->Langues). N'ayant pas ton code xml et php complet, j'ai utilisé l'exemple ci-dessous dont tu peux t'inspirer pour corriger ton code :
      $xml = <<<XML
      <?xml version="1.0" standalone="yes"?>
      <UserArea xmlns:pe="http://example.org/ns">
      <pe:CentresInteret>
      <CentreInteret>VTT</CentreInteret>
      <CentreInteret>Tennis</CentreInteret>
      <CentreInteret>Badminton</CentreInteret>
      <CentreInteret>Golf</CentreInteret>
      <CentreInteret>Basket</CentreInteret>
      </pe:CentresInteret>
      <pe:Langues>
      <Langue>
      <id>EN</id>
      <InformationsComplementaires>complement</InformationsComplementaires>
      <Niveau>Tres bon</Niveau>
      </Langue>
      <Langue>
      <id>DE</id>
      <Niveau>Correct</Niveau>
      </Langue>
      </pe:Langues>
      </UserArea>
      XML;
       
      $xml = new SimpleXMLElement($xml);
      
      $namespace = $xml->getDocNamespaces(true);
      
      $childUserArea = $xml->children($namespace['pe']);
      
      echo '<pre>';
      foreach($childUserArea as $LanguesOuCentres) {
      	var_dump($LanguesOuCentres->children());
      }
      echo '</pre>';
      
      0
      1. victoires Messages postés 141 Statut Membre > Pitet Messages postés 2845 Statut Membre
         
        Merci beaucoup, ça fonctionne ;)
        0