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 :

[DOM] Chercher une valeur dans un xml DOM


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [DOM] Chercher une valeur dans un xml DOM
    Bonjour à tous,
    J'ai un xml qui se présente comme ça:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <item>
    	<title>Produit 1</title>
    	<idlivre>1</idlivre>
    	<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
    	<dc:creator>admin</dc:creator>
    	<wp:postmeta>
    		<wp:meta_key>keyword</wp:meta_key>
    		<wp:meta_value><![CDATA[adolescence]]></wp:meta_value>
    	</wp:postmeta>
    .....
    </item>

    Je veux faire une recherche dans mon xml pour remonter tous les ITEM qui auraient dans le <titre> ou dans la <meta_value> du <postmeta> la valeur d'un mot clé passé en GET

    J'y arrive à moitié avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $searchTerm = $_GET[keyword];
    $doc = new DOMDocument();
    $doc->load('xml/boutique/products.xml');
     
    $xpath = new DOMXPath( $doc );
     
    $result = $xpath->query(
          '//wp:postmeta[ .//text()[contains( ., "'. addslashes($searchTerm) .'" )] ]'
    	);
     
    echo "Found: ". $result->length ."\n";
     
    foreach ( $result AS $node ) {
        echo $doc->saveXML($node) ."<br />\n\n";
        echo "Trouvé {$node->previousSibling->previousSibling->nodeValue},<br />" .
             " ID : {$node->parentNodes->nodeValue}<br /><br /><br /><br />\n";
    }
    Avec echo $doc->saveXML($node) ."; j'affiche bien la valeur.

    Le PROBLEME : Je n'arrive pas à récupérer les valeurs indépendamment.
    Je pouvoir afficher le <titre>, l'<ID> de l'ITEM dans lequel j'ai touvé la valeur ....
    Mais avec {$node->parentNodes->nodeValue} j'affiche l'arbre en entier, sans distinction de noeud ni autre.

    Comment faire donc pour :
    1. Chercher une valeur dans le xml
    2. Afficher les valeurs de l'item dans lequel on a trouvé cette valeur


    J'ai cherché partout ... impossible à trouver.
    Merci de votre aide !

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Le PROBLEME : Je n'arrive pas à récupérer les valeurs indépendamment.
    Il vaut mieux de chercher et retourner item et puis trouver des valeurs de quelque noeud enfant que vous voulez.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $xpath = new DOMXPath( $doc );
    $xpath->registerNamespace('wp','uri_de_namespace');    //avez-vous fait ce genre de ligne quelque part?
    $squery='//item[contains(title/text(), "'
        .addslashes($searchTerm).
        '") or contains(wp:postmeta/wp:meta_value/text(), "'
        .addslashes($searchTerm).
        '")]';
    $result=$xpath->query($squery);
     
    echo "Found: ". $result->length ."\n";
     
    foreach ($result AS $node) {
        echo $doc->saveXML($node) ."<br />\n\n";
        //pour instance
        $idlivre=$node->getElementsByTagName('idlivre');
        echo ($idlivre->length==0)?'':$idlivre->item(0)->nodeValue,"<br />\n";
        $meta_key=$node->getElementsByTagNameNS('urn:wp','meta_key');
        echo ($meta_key->length==0)? '':$meta_key->item(0)->nodeValue,"<br />\n";
    }
    Comme le code ne dépend en aucune manière l'ordre d'apparaître des enfants comme vous avez trouvé besoin de vous faire appeler previousSibling etc etc. ce qui a grande chance d'échouer si l'ordre a changé pour quelque raison que ce soit.

Discussions similaires

  1. Réponses: 9
    Dernier message: 11/07/2007, 23h46
  2. [linq] récupérer une valeur dans un xml
    Par maa dans le forum Linq
    Réponses: 8
    Dernier message: 02/02/2007, 02h42
  3. Chercher une valeur dans un tableau
    Par christel1982 dans le forum ASP
    Réponses: 5
    Dernier message: 14/09/2006, 09h01
  4. Réponses: 10
    Dernier message: 23/05/2006, 17h42
  5. Chercher une valeur dans la base de registre
    Par Sallie dans le forum MFC
    Réponses: 9
    Dernier message: 19/05/2006, 12h57

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