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

Langage PHP Discussion :

DOMDocument extraire <loc>


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut DOMDocument extraire <loc>
    Bonjour à tous,

    J'essaye d'extraire d'un sitemap les url contenu dans les balise <loc>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <url>
        <loc>http://www.example.com/e/</loc>
        <lastmod>2013-10-23T19:53:44+01:00</lastmod>
        <image:image>
            <image:loc>http://example.com/image.jpg</image:loc>
            <image:caption><![CDATA[bépo]]></image:caption>
        </image:image>
    </url>
    J'ai donc fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $urls = array();  
    $DomDocument = new DOMDocument();
    $DomDocument->preserveWhiteSpace = false;
    $DomDocument->load('post-sitemap.xml');
    $DomNodeList = $DomDocument->getElementsByTagName('loc');
     
    foreach($DomNodeList as $url) {
      $urls[] = $url->nodeValue;
    }
    Mon soucis est que mon script extrait aussi bien les balise <loc> que <image:loc>

    auriez vous pour n'extraire que les <loc>?

  2. #2
    Membre averti Avatar de chatofor
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    Peut-être en utilisant les expressions rationnelles ou alors tu extraies tout mais tu vérifies avec une condition si c'est bien une URL ou ce que tu cherches

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 998
    Par défaut
    La méthode DOMDocument::getElementsByTagName ignore les espaces de noms (namespaces), c'est pour cette raison qu'il te renverra aussi bien les éléments <loc> que <image:loc> que <biduletruc:loc>.
    Si tu veux cibler un espace de nom en particulier, tu dois utiliser DOMDocument::getElementsByTagNameNS.

    Pour pouvoir déterminer avec certitude dans quel espace de nom se trouve les éléments <loc>, tu dois montrer toute l'arborescence de ton fichier xml depuis la racine jusqu'à l'élément loc.

    Sinon tu peux tenter:
    • sans namespace:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $DomNodeList = $DomDocument->getElementsByTagNameNS('', 'loc');
    • avec le namespace de la racine:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $DomNodeList = $DomDocument->getElementsByTagNameNS('http://machin.bidule/truc', 'loc');
      http://machin.bidule/truc est l'url dans l'attribut xmlns="..." qui définit l'espace de noms par défaut, situé fort probablement à la racine de ton document. Dans un fichier sitemap, c'est probablement: http://www.sitemaps.org/schemas/sitemap/0.9. Si ce n'est pas le cas, cherche cet attribut chez les ancêtres de ton élément <loc>.


    Pour t'éviter une fastidieuse recherche, si tu es amené à utiliser XPath et que tu souhaites exprimer l'espace de noms par défaut, tu dois lui donner un petit nom de ton choix:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $xp = new DOMXPath($DomDocument);
    $xp->registerNamespace('truc', 'http://machin.bidule/truc');
    $DomNodeList = $xp->query('//truc:loc');

Discussions similaires

  1. DomDocument extraire des données du fichier XML
    Par Mika2008 dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2013, 11h25
  2. Extraire les icônes d'une DLL
    Par Globus dans le forum MFC
    Réponses: 6
    Dernier message: 13/09/2002, 14h44
  3. Extraire des chaines d'un RES
    Par Dumont dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2002, 09h13
  4. Réponses: 2
    Dernier message: 10/07/2002, 12h51
  5. Réponses: 2
    Dernier message: 30/05/2002, 11h19

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