Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/05/2011, 14h35   #1
Invité régulier
 
Homme Pierre
Étudiant
Inscription : mai 2011
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : mai 2011
Messages : 15
Points : 5
Points : 5
Par défaut Problème avec des balises xml

bonjour j'ai un problème pour importer des données xml grâce a simplexml php me dit que l'erreur vient de ":"
code:
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
<?php 
if (file_exists('test.html'))
{
$dsml = simplexml_load_file('test.xml');
$ds= $dsml->dsml:dsml ;
$d=$ds->dsmldirectory-entries;
foreach($d->dsml:entry  as $entry)
{
echo $entry->dsml:attr name="nomUsuel"->dsml:value;

}
}

?>
extrait du xml:
<dsml:dsml xmlns:dsml="xmlns:dsml=http://www.dsml.org/DSML">
  <dsml:directory-entries>
    <dsml:entry dn="uid=000315, ou=Agents, o=AG10G, c=fr">
      <dsml:objectclass>
        <dsml:oc-value>inetOrgPerson</dsml:oc-value>
        <dsml:oc-value>organizationPerson</dsml:oc-value>
        <dsml:oc-value>person</dsml:oc-value>
        <dsml:oc-value>Agent</dsml:oc-value>
        <dsml:oc-value>top</dsml:oc-value>
      </dsml:objectclass>
      <dsml:attr name="codhop">
        <dsml:value>081</dsml:value>
      </dsml:attr>
      <dsml:attr name="coddif">
        <dsml:value>10</dsml:value>
      </dsml:attr>
      <dsml:attr name="matricule">
        <dsml:value>000315</dsml:value>
      </dsml:attr>
      <dsml:attr name="entree">
        <dsml:value>2006-10-01</dsml:value>
      </dsml:attr>
      <dsml:attr name="civilite">
        <dsml:value>Mademoiselle</dsml:value>
      </dsml:attr>
      <dsml:attr name="nomUsuel">
        <dsml:value>NOM2-000313</dsml:value>
      </dsml:attr>
      <dsml:attr name="nomPatronymique">
	          <dsml:value>NOJF2-000313</dsml:value>
      </dsml:attr>
      <dsml:attr name="nomMarital">
        <dsml:value>NOMM2-000313</dsml:value>
      </dsml:attr>
      <dsml:attr name="prenom">
        <dsml:value>PRENOM2-000313</dsml:value>
      </dsml:attr>
        </dsml:directory-entries>
</dsml:dsml>

j'aimerais pouvoir extraire tous les <dsml:attr> avec leurs valeurs et les placer dans un tableau mais je pense que le problème viens des balises mais je n'en suis pas sur si quelqu'un pouvait m'aider
Krabbos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 14h52   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Avec SimpleXML il faut passer par SimpleXMLElement::children( ) quand il y a des espaces de noms.
http://fr.php.net/manual/fr/simplexm...t.children.php

PS : manque un </dsml:entry> dans ton exemple.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/05/2011, 15h37   #3
Invité régulier
 
Homme Pierre
Étudiant
Inscription : mai 2011
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : mai 2011
Messages : 15
Points : 5
Points : 5
merci Séb. pour cette réponse rapide mais j'ai un peu de mal a comprendre l'exemple disponible avec ton lien. Il faut que j'utilise simpleXMLElement::children( ) pour toutes mes balises? Car le fichier xml que j'ai a traduire est super long et ne contient que des balises composées comme celle de l'exemple.
si quelqu'un avait un exemple avec mes balises sa m'aiderait beaucoup

ps: merci pour le </dsml:entry> mauvais copier coller
Krabbos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 17h58   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Non non, le cas échéant tu veux travailler sur des éléments d'un certain espèce de nom, tu as juste, en qque sorte, à charger le XML de cet espace de nom.

Je te file un exemple...

dsml.xml :
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
<?xml version="1.0"?>
<dsml:dsml xmlns:dsml="xmlns:dsml=http://www.dsml.org/DSML">
    <dsml:directory-entries>
        <dsml:entry dn="uid=000315, ou=Agents, o=AG10G, c=fr">
            <dsml:objectclass>
                <dsml:oc-value>inetOrgPerson</dsml:oc-value>
                <dsml:oc-value>organizationPerson</dsml:oc-value>
                <dsml:oc-value>person</dsml:oc-value>
                <dsml:oc-value>Agent</dsml:oc-value>
                <dsml:oc-value>top</dsml:oc-value>
            </dsml:objectclass>
            <dsml:attr name="codhop">
                <dsml:value>081</dsml:value>
            </dsml:attr>
            <dsml:attr name="coddif">
                <dsml:value>10</dsml:value>
            </dsml:attr>
            <dsml:attr name="matricule">
                <dsml:value>000315</dsml:value>
            </dsml:attr>
            <dsml:attr name="entree">
                <dsml:value>2006-10-01</dsml:value>
            </dsml:attr>
            <dsml:attr name="civilite">
                <dsml:value>Mademoiselle</dsml:value>
            </dsml:attr>
            <dsml:attr name="nomUsuel">
                <dsml:value>NOM2-000313</dsml:value>
            </dsml:attr>
            <dsml:attr name="nomPatronymique">
                <dsml:value>NOJF2-000313</dsml:value>
            </dsml:attr>
            <dsml:attr name="nomMarital">
                <dsml:value>NOMM2-000313</dsml:value>
            </dsml:attr>
            <dsml:attr name="prenom">
                <dsml:value>PRENOM2-000313</dsml:value>
            </dsml:attr>
        </dsml:entry>
    </dsml:directory-entries>
</dsml:dsml>
index.php :
Code :
1
2
3
4
5
6
7
<?php
 
$xml = simplexml_load_file('dsml.xml') ;
$children = $xml->children('xmlns:dsml=http://www.dsml.org/DSML') ;
 
header('Content-Type: text/plain') ;
print_r($children) ;
On obtient :

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
SimpleXMLElement Object
(
    [directory-entries] => SimpleXMLElement Object
        (
            [entry] => SimpleXMLElement Object
                (
                    [objectclass] => SimpleXMLElement Object
                        (
                            [oc-value] => Array
                                (
                                    [0] => inetOrgPerson
                                    [1] => organizationPerson
                                    [2] => person
                                    [3] => Agent
                                    [4] => top
                                )
 
                        )
 
                    [attr] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [value] => 081
                                )
 
                            [1] => SimpleXMLElement Object
                                (
                                    [value] => 10
                                )
 
                            [2] => SimpleXMLElement Object
                                (
                                    [value] => 000315
                                )
 
                            [3] => SimpleXMLElement Object
                                (
                                    [value] => 2006-10-01
                                )
 
                            [4] => SimpleXMLElement Object
                                (
                                    [value] => Mademoiselle
                                )
 
                            [5] => SimpleXMLElement Object
                                (
                                    [value] => NOM2-000313
                                )
 
                            [6] => SimpleXMLElement Object
                                (
                                    [value] => NOJF2-000313
                                )
 
                            [7] => SimpleXMLElement Object
                                (
                                    [value] => NOMM2-000313
                                )
 
                            [8] => SimpleXMLElement Object
                                (
                                    [value] => PRENOM2-000313
                                )
 
                        )
 
                )
 
        )
 
)
Ex. pour accéder à la valeur du 1er <attr> :

echo $children->{'directory-entries'}->entry->attr[0]->value ;

Etc.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/05/2011, 10h21   #5
Invité régulier
 
Homme Pierre
Étudiant
Inscription : mai 2011
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : mai 2011
Messages : 15
Points : 5
Points : 5
merci c'est bon sa marche .
Krabbos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h32.


 
 
 
 
Partenaires

Hébergement Web