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

Langage PHP Discussion :

XML to array


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2014
    Messages : 45
    Points : 23
    Points
    23
    Par défaut XML to array
    J'utilise un code pour récupérer les name servers de mes domaines:

    l'API de mon hébergeur r'envoie:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <ApiResponse xmlns="http://api.namecheap.com/xml.response" Status="OK">
    <Errors/>
    <Warnings/>
    <RequestedCommand>namecheap.domains.getinfo</RequestedCommand>
    <CommandResponse Type="namecheap.domains.getInfo">
    <DomainGetInfoResult Status="Ok" ID="19695615" DomainName="vpsonly.xyz" OwnerName="noam00" IsOwner="true">
    <DomainDetails>
    <CreatedDate>06/04/2016</CreatedDate>
    <ExpiredDate>06/04/2017</ExpiredDate>
    <NumYears>0</NumYears>
    </DomainDetails>
    <LockDetails/>
    <Whoisguard Enabled="True">
    <ID>15266262</ID>
    <ExpiredDate>06/04/2017</ExpiredDate>
    <EmailDetails WhoisGuardEmail="977e3e0b320b4e9998634c7b530c224f.protect@whoisguard.com" ForwardedTo="leprovostnoam@hotmail.com" LastAutoEmailChangeDate="" AutoEmailChangeFrequencyDays="0"/>
    </Whoisguard>
    <PremiumDnsSubscription>
    <UseAutoRenew>false</UseAutoRenew>
    <SubscriptionId>-1</SubscriptionId>
    <CreatedDate>0001-01-01T00:00:00</CreatedDate>
    <ExpirationDate>0001-01-01T00:00:00</ExpirationDate>
    <IsActive>false</IsActive>
    </PremiumDnsSubscription>
    <DnsDetails ProviderType="FREE" IsUsingOurDNS="true" HostCount="2" EmailType="FWD" DynamicDNSStatus="false" IsFailover="false">
    <Nameserver>dns1.registrar-servers.com</Nameserver>
    <Nameserver>dns2.registrar-servers.com</Nameserver>
    </DnsDetails>
    <Modificationrights All="true"/>
    </DomainGetInfoResult>
    </CommandResponse>
    <Server>PHX01APIEXT01</Server>
    <GMTTimeDifference>--4:00</GMTTimeDifference>
    <ExecutionTime>0.316</ExecutionTime>
    </ApiResponse>
    j'utilise le code:
    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
    20
    21
    22
    23
    24
    25
    26
    27
     
    function XML2Array(SimpleXMLElement $parent)
    {
        $array = array();
     
        foreach ($parent as $name => $element) {
            ($node = & $array[$name])
                && (1 === count($node) ? $node = array($node) : 1)
                && $node = & $node[];
     
            $node = $element->count() ? XML2Array($element) : trim($element);
        }
     
        return $array;
    }
    $api_dns_servers = file_get_contents("API DE MON HEBERGEUR");
     
    $xml_dns_servers   = simplexml_load_string($api_dns_servers);
    $array_dns_servers = XML2Array($xml_dns_servers);
    $array_dns_servers = array($xml_dns_servers->getName() => $array_dns_servers);
    $array_dns_servers = $array_dns_servers['ApiResponse']['CommandResponse']['DomainGetInfoResult']['DnsDetails']['Nameserver']; 
     
    foreach($array_dns_servers as $key => $value){
    	$dns_i ++;
    	echo "DNS".$dns_i.": ".$value."<br>";
    }
    // r'envoie: DNS1: dns1.registrar-servers.com<br>DNS2: dns2.registrar-servers.com<br>


    Maintenant pour la réponse XML:
    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
     
    <ApiResponse xmlns="http://api.namecheap.com/xml.response" Status="OK">
    <Errors/>
    <Warnings/>
    <RequestedCommand>namecheap.domains.dns.gethosts</RequestedCommand>
    <CommandResponse Type="namecheap.domains.dns.getHosts">
    <DomainDNSGetHostsResult Domain="vpsonly.xyz" EmailType="FWD" IsUsingOurDNS="true">
    <host HostId="90920835" Name="www" Type="CNAME" Address="parkingpage.namecheap.com." MXPref="10" TTL="1800" AssociatedAppTitle="" FriendlyName="CNAME Record" IsActive="true" IsDDNSEnabled="false"/>
    <host HostId="90920834" Name="@" Type="URL" Address="http://www.vpsonly.xyz/" MXPref="10" TTL="1800" AssociatedAppTitle="URL Forwarding" FriendlyName="URL Record" IsActive="true" IsDDNSEnabled="false"/>
    </DomainDNSGetHostsResult>
    </CommandResponse>
    <Server>PHX01APIEXT01</Server>
    <GMTTimeDifference>--4:00</GMTTimeDifference>
    <ExecutionTime>0.923</ExecutionTime>
    </ApiResponse>

    j'aimerais récupérer:
    www CNAME parkingpage.namecheap.com. 10 1800 CNAME Record<br>@ URL 10 http://www.vpsonly.xyz/ 1800 URL Forwarding URL Record


    Je vous remercie d'avance pour vos réponses,

    Cordialement

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Tu peux faire ça de plusieurs manières, mais le plus rapide, si tout ce que tu veux c'est récupérer la valeur des clés "HOST" (ou la valeur d'autres clés dont la structure est connue à l'avance) est d'utiliser xml_parse_into_struct.

    Tout droit sorti de la doc:
    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
    20
    21
    22
    <?php
     
    $xml = <<<XMLTEXT
    <ApiResponse xmlns="http://api.namecheap.com/xml.response" Status="OK">
    <Errors/>
    <Warnings/>
    <RequestedCommand>namecheap.domains.dns.gethosts</RequestedCommand>
    <CommandResponse Type="namecheap.domains.dns.getHosts">
    <DomainDNSGetHostsResult Domain="vpsonly.xyz" EmailType="FWD" IsUsingOurDNS="true">
    <host HostId="90920835" Name="www" Type="CNAME" Address="parkingpage.namecheap.com." MXPref="10" TTL="1800" AssociatedAppTitle="" FriendlyName="CNAME Record" IsActive="true" IsDDNSEnabled="false"/>
    <host HostId="90920834" Name="@" Type="URL" Address="http://www.vpsonly.xyz/" MXPref="10" TTL="1800" AssociatedAppTitle="URL Forwarding" FriendlyName="URL Record" IsActive="true" IsDDNSEnabled="false"/>
    </DomainDNSGetHostsResult>
    </CommandResponse>
    <Server>PHX01APIEXT01</Server>
    <GMTTimeDifference>--4:00</GMTTimeDifference>
    <ExecutionTime>0.923</ExecutionTime>
    </ApiResponse>
    XMLTEXT;
     
    $p = xml_parser_create();
    xml_parse_into_struct($p, $xml, $vals, $index);
    print_r($vals);
    Ça va te donner un tableau $vals qui contient une suite de tableaux, dont les deux suivants:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    [9] => Array
            (
                [tag] => HOST
                [type] => complete
                [level] => 4
                [attributes] => Array
                    (
                        [HOSTID] => 90920835
                        [NAME] => www
                        [TYPE] => CNAME
                        [ADDRESS] => parkingpage.namecheap.com.
                        [MXPREF] => 10
                        [TTL] => 1800
                        [ASSOCIATEDAPPTITLE] => 
                        [FRIENDLYNAME] => CNAME Record
                        [ISACTIVE] => true
                        [ISDDNSENABLED] => false
                    )
     
            )
     
     
    [11] => Array
            (
                [tag] => HOST
                [type] => complete
                [level] => 4
                [attributes] => Array
                    (
                        [HOSTID] => 90920834
                        [NAME] => @
                        [TYPE] => URL
                        [ADDRESS] => http://www.vpsonly.xyz/
                        [MXPREF] => 10
                        [TTL] => 1800
                        [ASSOCIATEDAPPTITLE] => URL Forwarding
                        [FRIENDLYNAME] => URL Record
                        [ISACTIVE] => true
                        [ISDDNSENABLED] => false
                    )
     
            )
    Tu n'as ensuite qu'à filtrer $vals pour ne retenir que les tableaux dont la clé tag est égale à HOST, puis à récupérer le sous-tableau attributes de ce tableau, et à récupérer les différentes valeurs dans ce tableau.

Discussions similaires

  1. [SimpleXML] Object array implode
    Par Irokoi dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/06/2013, 17h46
  2. [PHP 4] XML to ARRAY et base64
    Par ssc37 dans le forum Langage
    Réponses: 3
    Dernier message: 10/12/2009, 15h44
  3. [AJAX] XML to array
    Par Spaccio dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/01/2009, 10h11
  4. Récupérer du XML dans Array
    Par Invité dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/03/2007, 00h55
  5. [XML] Type array dans XML
    Par jambonstar dans le forum Delphi
    Réponses: 1
    Dernier message: 11/10/2006, 14h09

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