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 08/01/2008, 16h03   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Par défaut [SimpleXML] Charger un fichier XML comprenant des espaces de nom

Bonjour,

le nœud racine de mon fichier xml est le suivant :
Code XML :
1
2
3
4
5
6
7
8
<?xml version="1.0" standalone="yes"?>
<SiteConfiguration xmlns:Xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/PortalCfg.xsd">
. .
. .
. .
. .
 
</SiteConfiguration>

tant que je laisse (xmlns:Xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/PortalCfg.xsd"), je n'arrive pas à charger les données de mon fichier xml, quand je l'enlève ça marche.

voilà mon code php :
Code :
1
2
3
4
public function Load($path)
 {
  return $document=simplexml_load_file($path);  /* ouverture du fichier */
 }
Merci de votre aide
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 18h56   #2
Membre chevronné
 
Avatar de Hervé Saladin
 
Développeur Web
Inscription : décembre 2004
Messages : 636
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2004
Messages : 636
Points : 689
Points : 689
Citation:
je n'arrive pas à charger les données de mon fichier xml
Tu peux être un peu plus précis stp ? qu'est-ce qui se passe ? t'as un message d'erreur ? une exception est levée ?

Est-ce que tu es sûr que ton fichier xml respecte bien le schema ?
__________________
Ne cliquez pas sur ce lien
Hervé Saladin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 10h37   #3
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Bonjour,

j'ai pas un message d'erreur,sauf que j'ai une liste que j'alimente avec les données de mon fichier xml,et quand je laisse (xmlns:Xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/PortalCfg.xsd"), ma liste est vide.

voulez vous me dire comment je peux vérifier le schéma de mon fichier xml?

Merci de votre aide.
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2008, 19h30   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Pourrait-on obtenir le code en question (simplifié) et un document XML de test complet ?

Citation:
voulez vous me dire comment je peux vérifier le schéma de mon fichier xml?
Que voulez-vous dire ? Parlez-vous de validation ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 11h31   #5
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Bonjour,

Je vous envoie en pièce jointe le fichier XML de test.
Mon code Php est le suivant:

private $path='C:\wamp\www\Test\protected\pages\PortalCfg.xml';
public function onInit()
{
$document=simplexml_load_file($this->path);
$xpath = '/SiteConfiguration/Tab';
$keys=$document->xpath($xpath);
}

Quand je veux afficher le tableau '$keys' il ne m'affiche rien:
print_r($keys);//pas de résultat

Merci de votre aide.
Fichiers attachés
Type de fichier : xml PortalCfg.xml (2,6 Ko, 2 affichages)
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 14h00   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Enregistrez l'espace de nom puis utilisez-le dans votre expression XPath :
Code :
1
2
3
4
5
<?php
$document = simplexml_load_file('PortalCfg.xml');
$document->registerXPathNamespace('default', 'http://tempuri.org/PortalCfg.xsd');
$keys = $document->xpath('/default:SiteConfiguration/default:Tab');
print_r($keys);
Sinon revoyez votre expression XPath (fonction local-name).

PS : les méthodes getDocNamespaces() et getNamespaces() permettent éventuellement d'obtenir les espaces de nom.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 15h30   #7
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
voulez vous me dire on quoi sert : 'http://tempuri.org/PortalCfg.xsd' ?
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 15h33   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Ça fait référence à votre espace de nom par défaut :
Code XML :
<SiteConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/PortalCfg.xsd">
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 11h07   #9
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Bonjour,


Voilà le code que j'utilise pour modifier un noeud dans mon fichier xml:

$doc=simplexml_load_file($this->path);
$valeursTab=$doc->xpath('/default:SiteConfiguration/default:Tab');
$valeursModules=$doc->xpath('/default:SiteConfiguration/default:ModuleDefinition');
//cette fonction me retourne un tableau contenant touts les données avec celles modifiées
$Valeurs=$this->getValuesFromForm($valeursTab,$valeursModules);
$Valeurs=$doc->asXML();
// ecriture des donnees dans le fichier
$handel=fopen($this->path,'w');
fwrite($handel,$Valeurs);
fclose($handel);

aprés validation,je vérifie mon fichier xml,les données sont bien modifiées mais les chaines qui comportent des accents sont mal enregistrées,par exemple:
'Réinscription' devient 'R&#xE9;inscription'

avez vous une idée sur ça?
Merci
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 15h20   #10
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Bonjour,

Concernant mon problème,je remplace '<?xml version="1.0" standalone="yes"?>' par '<?xml version="1.0" encoding="UTF-8"?>', mais je veux pas modifier dans mon fichier XML,y a t-il un autre moyen de faire ?

Merci de votre aide
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 01h18   #11
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
L'extension DOM est capable de gérer un document standalone (propriété, en lecture/écriture, (xmlS|s)tandalone de tout objet DomDocument). En revanche, pour SimpleXML ce n'est visiblement pas le cas
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 10h30   #12
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Bonjour,

Pouvez vous m'expliquer un peu plus car j'ai pas bien saisi .
nadiaflamingenierie 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 14h26.


 
 
 
 
Partenaires

Hébergement Web