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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] accéder à un contenu d'élément en fonction de son attribut


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    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 : 4
    Points
    4
    Par défaut [SimpleXML] 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:

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

    <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 :

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

    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.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 197
    Points : 8 417
    Points
    8 417
    Billets dans le blog
    17
    Par défaut
    Tu peux soumettre une requête XPath comme //label[@name='unautrenom'] avec http://fr2.php.net/manual/en/simplexmlelement.xpath.php

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    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 : 4
    Points
    4
    Par défaut
    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:

    $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:

    $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.

    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!!!

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    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 : 4
    Points
    4
    Par défaut
    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:

    <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:

    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:

    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:

    echo $un_nom
    echo $un_autre_nom
    Voila !

    Qu'en pensez vous?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/05/2019, 11h23
  2. Précédent élément en fonction d'un attribut
    Par Depolip dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 23/10/2012, 13h51
  3. autoriser contenu nul d'un élément en fonction de l'attribut
    Par Waldoo dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 15/06/2011, 15h07
  4. Cibler un élément en fonction de son contenu
    Par dedis dans le forum jQuery
    Réponses: 2
    Dernier message: 20/01/2011, 13h50
  5. Réponses: 2
    Dernier message: 21/09/2006, 13h58

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