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] Filtrer des balises grâce à leurs attributs


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Par défaut [SimpleXML] Filtrer des balises grâce à leurs attributs
    Bonjour,

    J'utilise php et simplexml.

    Je rencontre actuellement le problème suivant :

    J'ai ce fichier xml

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <racine>
    <identifiant>toto</identifiant>
    <information1 type="a">blabla</information1>
    <information1 type="b">blibli</information1>
    <information2>bleble</information>
    <information3 type="a">bloblo</information1>
    <information3 type="b">blublu</information1>
    ...
    </racine>

    que j'ouvre ainsi $xml= simplexml_load_file('monFichier.xml');

    et j'aimerai filtrer les informations pour ne retenir que celles qui n'ont pas d'attribut et celles qui ont l'attribut type="a".

    Est-il possible de faire cela avec un xpath ?

    Encore mieux, est-il possible de faire cela sans passer par un xpath, en complétant cet appel $xml->information1 avec l'information type="a", directement sans passer par une condition if ?


    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    je pense que quelquechose de ce style te conviendra : ( http://fr2.php.net/manual/fr/functio...ment-xpath.php )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml= simplexml_load_file('monFichier.xml');
    $balises_avec_att_a_eq_1 = $xml->xpath('/racine/*[starts-with(name(), "information")][not(@type) or @type = "a"]');
    Que fait le XPath ? :

    Récupération des noeuds (~~balises) fils de <racine> dont le nom commence par "information" et qui n'ont pas d'attribut "type" ou dont l'attribut "type" vaut "a"
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Par défaut
    Bonjour et merci pour cette réponse.

    Je me suis mal exprimé lorsque j'ai dit "j'aimerai filtrer les informations",

    en fait pour le xml cité en exemple j'aimerai récupérer les infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $xml->identifiant (toto)
    $xml->information1 (blabla)
    $xml->information2 (bleble)
    $xml->information3 (bloblo)
    Lorsque j'utilise ta requête dans le xpath (que ce soit avec en condition type="a" ou type="b") et que je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $xml->information1
    je récupère systématiquement blabla ...

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    C'est parce qu'il te faut ensuite parcourir le résultat du XPath...

    et pas ton document XML (sinon effectivement ça sert à rien)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Par défaut
    Citation Envoyé par Swoög
    C'est parce qu'il te faut ensuite parcourir le résultat du XPath...

    et pas ton document XML (sinon effectivement ça sert à rien)

    Mais dans ce cas là si je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $test=$xml->xpath('/racine/*[not(@type) or @type= "a"]');
    je suis obligé de récupérer les informations par un index, genre on ne peut pas parcourir par rapport au nom de la balise ?

  6. #6
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    si tu veux avoir un nom de balise spécifique, il te faut alors modifier le XPath en conséquence...

    celui que je t'ai donné récupèrera toutes les balises dont le nom commence par "information" ensuite, si tu ne veux que les balises "information1" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /racine/information1[not(@type) or @type = "a"]
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

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

Discussions similaires

  1. [Article] Liste des balises et de leurs enfants pour une validation XHTML 1.1
    Par giminik dans le forum Publications (X)HTML et CSS
    Réponses: 12
    Dernier message: 12/02/2018, 16h11
  2. [PowerShell] Comment filtrer des fichiers sur leur date de création
    Par Gusss dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 04/01/2010, 11h39
  3. [SimpleXML] Lecture d'un flux comportant des balises itunes
    Par yannux dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/11/2007, 13h49
  4. Référencement : attribut "title" des balises h
    Par prome dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 03/10/2007, 15h02
  5. Filtre d'affichage de balise selon leur attributs
    Par Norely dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 03/04/2003, 15h33

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