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] Recherche d'un n%u0153ud


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut [DOM] Recherche d'un n%u0153ud
    Bonjour,

    Depuis une url du type http://127.0.0.1/projet/?chemin=inde...est/page_test2, je cherche à parcourir un arbre dom.

    L'arbre représente l'arborescence du site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    arbre.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <arbre>
    	<index type="test1">
    		<page_test type="test2">
    			<page_test2 type="test3"></page_test2>
    		</page_test>
    		<page_test2 type="erreur"></page_test2>
    	</index>
    </arbre>
    que je parcours avec le code php suivant :
    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
    20
    21
    22
    23
    24
    25
     
    index.php
     
    <?php
    // url - chemin de la page
    $chemin = (isset($_GET['chemin']))? $_GET['chemin'] : 'index';
     
    // décomposition du chemin
    $chemin = explode('/', $chemin);
     
    // chargement de l'arbre xml
    $arbre = new DomDocument();
    $arbre->load('fichier/config/arbre.xml');
     
    // recherche de la page dans l'arbre xml
    foreach($chemin as $page){
    $arbre->getElementsByTagName($page)->item(0);
    }
     
    // type de page
    $type = $arbre->getElementsByTagName($page)->item(0)->getAttribute('type');
    echo $type;
    ?>
    <h2> exemple de lien :</h2>
    <a href="?chemin=index/page_test/page_test2">lien</a>
    avec ça, je récupère le type de page selon la variable chemin rentrée dans l'url. Seulement, quelques détails me chiffonnent :

    - je ne sais pas comment tester si un tag existe bel et bien. Il faudrait que je puisse générer une page d'erreur 404 si la page n'existe pas. A priori, j'aurai tendance à penser que je ne construis pas correctement mon arbre vu qu'une telle méthode ne semble pas exister (on peut tester si un attribut existe mais pas un tag).

    - la méthode getElementsByTagName parcours l'ensemble du document pour lister les tags correspondants. Mais, dans mon cas, je recherche toujours le premier tag qui se trouve à chaque fois parmi les premiers enfants du noeud sur lequel je suis. Autrement dit, je n'ai pas d'intérêt à parcourir l'arbre entier même si ici, vu la taille de l'arbre, ce n'est pas gênant, j'aimerai éviter d'avoir à chercher dans l'arbre entier dans l'hypothèse d'un site avec beaucoup de pages.

    Merci pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 83
    Par défaut tester la charge
    Bonsoir,

    Avec DOM, l'arbre est chargé en mémoire donc pour un gros site ça sous entends grosse utilisation de mémoire sur le serveur.

    Une recherche de plus ou de moins sur un nom de noeud élément ne doit pas changer grand chose.

    Cependant pour en être plus sûr il faut créer un fichier de test cohérent et le mettre en oeuvre dans les conditions du futur serveur, histoire de voir.

    Xavier

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut
    bonjour et merci pour ta réponse.

    J'ai fais quelques test, et il s'avère que mon code ne fonctionne absolument pas. Plus je cherche et plus j'ai l'impression que dom n'est pas fait pour ce que je recherche.

    exemple d'arbre :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <racine><![CDATA[Accueil]]>
    	<test><![CDATA[test 1]]>
    		<produit><![CDATA[produits 1]]></produit>
    	</test>
    	<produit><![CDATA[produits 2]]>
    		<sportwear><![CDATA[sportwear]]></sportwear>
    		<test><![CDATA[test 2]]></test>
    	</produit>
    	<contact><![CDATA[contact]]></contact>
    	<test><![CDATA[test 3]]></test>
    </racine>

    Je connais le chemin racine/produit/test donc, suivant l'imbrication des nœuds, il faudrait que je suive l'arbre de cette manière :

    <racine><![CDATA[Accueil]]> puis <produit><![CDATA[produits 2]]> puis <test><![CDATA[test 2]]></test>

    seulement avec dom, ça me fait <racine><![CDATA[Accueil]]> puis <produit><![CDATA[produits 1]]> puis ...boom(vu qu'il n'y a pas de nœud à suivre). Ceci car dom ne permet pas(du moins je n'ai pas trouvé comment faire) de lister les premiers enfants et donc suit le premier nœud qu'il trouve.

    (vexa, je met de coté le côté mémoire serveur, pour l'instant, je veux juste quelque chose qui fonctionne)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 182
    Par défaut
    Pour verifier la presence d'un tag, om verifie la longeur du neoud. S il est nul, il n'y a pas de tag. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    if ($node->length > 0){
    <div style="margin-left:40px">echo " le noeud existe "</div>}else{
    <div style="margin-left:40px">echo " Le noeud n existe pas "</div>}

Discussions similaires

  1. [DOM] Recherche tutoriel menu déroulant
    Par SirDarken dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 04/07/2008, 16h31
  2. [DOM] Recherche tutoriel pour réaliser des formulaires avec DOM !
    Par polothentik dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 25/04/2008, 10h20
  3. [DOM] Recherche de mots dans un attribut
    Par Klimium dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 25/06/2007, 14h34
  4. [DOM] Recherche dans un fichier XML via XPath
    Par Sayrus dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 18/06/2007, 16h43
  5. [DOM] recherche de tuto
    Par wamania dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/06/2006, 10h52

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