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 03/02/2012, 00h24   #1
Invité de passage
 
Homme
Développeur Web
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2012
Messages : 4
Points : 3
Points : 3
Par défaut accéder à un contenu d'élément en fonction de son attribut

Tout d'abord bonjour à tous, très heureux de rejoindre ce forum...

mon problème est le suivant:

Je stocke dans un xml les différents contenus statiques d'un site et veut les afficher dans un index.php en fonction de la langue.

j'ai donc un script check_labels.php qui me retourne un xml en fonction de la langue ($lang = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; suivi d'un switch case pour le choix xml...)

dans un index.php j'insère ce XML grâce aux lignes suivantes:

Citation:
include 'check_labels.php';
$labels = new SimpleXMLElement($xmlstr);
cet XML est de la forme (pour le cas ou la langue est fr:

Citation:
<labels>
<label name="unnom">ce nom là</a>
<label name="unautrenom">cet autre nom</a>
Ce que je n'arrive pas à faire c'est d'afficher le contenu correspondant par exemple à l'attribut "unautrenom" dans un echo,

je pense que ça doit commencer par :

Citation:
echo "$labels/label..."
et qu'il devrait y avoir du

Citation:
label[@name='unautrenom']
si tout était beau...

mais ça ne marche pas...même en cherchant sur php.net...

Y aurait il quelqu'un d'assez patient pour m'aider sur ce problème qui a pourtant l'air simple?

merci d'avance.
jfvlasic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 13h00   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 824
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 824
Points : 3 455
Points : 3 455
Tu peux soumettre une requête XPath comme //label[@name='unautrenom'] avec http://fr2.php.net/manual/en/simplexmlelement.xpath.php
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/02/2012, 23h12   #3
Invité de passage
 
Homme
Développeur Web
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2012
Messages : 4
Points : 3
Points : 3
merci Séb!!!

ça marche!!

Du coup je vois un problème, mais il vient peut-être de ma conception du truc,

c'est que je dois donc à chaque fois que je veux insérer un contenu de mon xml dans ma sortie html (php), éxécuter la requête xpath pour ensuite afficher le resultat:

Citation:
$result = $xml->xpath("//labels/label[@name='unnom']");
echo "$result[0]
donc 2 lignes à effectuer à chaque fois que j'ai besoin d'une traduction.

Comme je compte gérer ainsi une très grosse partie de mon site, je me demande:

N'y a t'il pas un moyen d'effectuer une requête xpath globale en début de script genre:

Citation:
$result = $xml->xpath("//labels/label");
foreach $result{
//ici créer par magie des variables ayant le nom des attributs et la valeur du contenu!!!

}

pour ensuite pouvoir imprimer (echo) le contenu que je veux ou je veux selon la méthode ci-dessous.

Citation:
echo $unautrenom;
Bon je sais que ça a l'air tiré par les cheveux mais bon...je désespère pas...

merci d'avance du temps que tu voudrais bien m'accorder!!!
jfvlasic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 10h53   #4
Invité de passage
 
Homme
Développeur Web
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2012
Messages : 4
Points : 3
Points : 3
La nuit porte conseil...

Il semblerait que j'ai réussi ce que je voulais, mais avant de mettre la mention [résolu] j'attend de voir si quelqu'un va trouver la faille ou le truc qui fait que ça ne marchera pas...

Perso j'attend de voir el comportement avec un gros XML...

En attendant voici donc mon cas:

d'abord un script PHP check_labels.php qui détecte la langue à utiliser et en fonction m'envoie un fichier XML du type:

Citation:
<labels>
<label name="un_nom">Un Nom</label>
<label name="un_autre_nom">Un autre Nom</label>
...
</labels>
ensuite en début de mon script de sortie HTML j'envoie une requête:

Citation:
include 'check_labels.php';
$xml = new SimpleXMLElement($xmlstr);
$result = $xml->xpath("//labels/label");
ensuite je fais la liste de tous les contenus et je créé des variables ayant pour dénomination la valeur de chaque attribut et pour contenu, et bien, le contenu de chaque branche du XML concernée:

Citation:
foreach ($result as $row){

$atrs = $row->attributes();
$$atrs = $row;
}
Ce qui me permet ensuite plus bas dans la sortie de faire des echo pour ces valeurs:

Citation:
echo $un_nom
echo $un_autre_nom
Voila !

Qu'en pensez vous?
jfvlasic 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 01h05.


 
 
 
 
Partenaires

Hébergement Web