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] Parser un <p> sans class ni id avec simple_html_dom


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut [SimpleXML] Parser un <p> sans class ni id avec simple_html_dom
    Bonjour,
    J'ai beau chercher depuis 2 jours en googlant ou en tatonant, mais je n'arrive pas à trouver l'expression exacte pour le résultat désiré
    Je cherche à extraite un chaine de caractères d'une page contenant
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <p class="typedoc"></p>
    <p>
        <label>Période : </label>1900 - 1988
    </p>
    <div id="mini-bloc"></div>
    Pour la class typedoc, et le div mini-bloc : pas de pb
    Par contre, j'aimerais récupérer la chaine "1900 - 1988"
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $html= file_get_html($adresse);  
    foreach ($html->find('label') as $p){
        //$periode .= $p->plaintext ; // je concatène les réponses pour l'essai
    }
    J'obtiens bien tout ce qui est entre balises <label> dans ma page, mais pas la chaine désirée
    Désolé, si la réponse est évidente, mais à l'instant elle ne l'est pas pour moi !!
    Par avance, merci
    Bertrand

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut simple_html_dom
    Bonjour,
    Je me permets un petit up, le sujet ne semblant pas remporter beaucoup de succès
    Merci de m'indiquer si trop stupide/ trop compliqué / pas dans la bonne section ou autres ??
    Bertrand

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 131
    Points : 242
    Points
    242
    Par défaut
    Salut,

    les regexp répond à ton besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $chaine = '<p class="typedoc"></p>
    <p>
        <label>Période : </label>1900 - 1988
    </p>
    <div id="mini-bloc"></div>';
     
    preg_match ('/<label>(.+)<\/label>(.+)\s*<\/p>/', $chaine, $regs);
     
    echo '<pre>', print_r ($regs), '</pre>';

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Bonjour selmouadin et merci pour ta réponse,
    J'étais tellement dans la logique simple_html_dom que j'ai oublié les Regex (que je ne maitrise pas du tout)
    <p class="typedoc"> a plusieurs enfants, je dois donc chercher dans le DOM entier
    il y a plusieurs 'label' dans la page, je dois donc me limiter au
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <label>  Période : </label>
    Et donc remplacer le (.+) par 'Période :' mais je ne trouve pas la syntaxe, Je suis vraiment nul en Regex (pas faute d'avoir essayer :-(

    Merci encore
    Bertrand

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Oupss, honte à moi
    Dans mes essais j'avais oublié les espaces
    Je devrais y arriver avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /(<label>)(\s+)(Période :)(\s+)(<\/label>)(\s+)(.+)(\s+)(<\/p)/
    Je passe en résolu
    Merci encore et bon WE
    Bertrand

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Désolé, je ne comprends plus
    Sur hifi RegEx, avec /(<label>)(\s+)(Période (\s+)(<\/label>)(\s+)(.+)(\s+)(<\/p)/, il me décompose bien 9 zones
    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $html= file_get_html($adresse);    
    $regex='#(<label>)(\s+)(Période :)(\s+)(<\/label>)(\s+)(.+)(\s+)(<\/p)#'; 
        if (preg_match ($regex, $html)){
                echo 'Période trouvée <br />';
            }else{  
                 echo 'Période NON trouvée <br />';   
           }
    Il ne trouve rien :-(
    Bertrand

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Je ne sais pas si c'est la solution la plus élégante, mais voila comment j'ai solutionné mon problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $html= file_get_html($adresse); 
     $regex='/<label>(Période : )(<\/label>)(\s+)(\d+)( - )(\d+)(\s+)(<\/p>)/'; 
     if (preg_match ($regex, $html, $regs)){
                echo 'Période trouvée '.$regs[4].' - '.$regs[6].'<br />';
            }else{  
                echo 'Période NON trouvée <br />'; 
            }
    Merci encore à selmouadin
    Bertrand

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

Discussions similaires

  1. [SimpleXML] Parser un flux xml avec SimpleXMLElement
    Par DeezerD dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/11/2006, 18h07
  2. [SimpleXML] Parser de gros fichiers
    Par Bobtop dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 03/11/2006, 16h23
  3. Réponses: 12
    Dernier message: 21/04/2006, 16h06
  4. [SimpleXML] Parser un XML et en récupérer des valeurs
    Par mickael.be dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 15/04/2006, 15h08
  5. Réponses: 3
    Dernier message: 18/10/2005, 21h14

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