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] Ordonner noeuds


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut [DOM] Ordonner noeuds
    Bonjour,

    Je demande beaucoup de trucs mais j'amerais savoir comment trier les noeuds selon leur date par exemple.

    Date étant attribut du noeud .. date étant sous la forme 124544345 ..

    Tant qu'on y est, comment faire pour afficher seulement 5 noeuds par exemple ?

    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Klimium
    Je demande beaucoup de trucs mais j'amerais savoir comment trier les noeuds selon leur date par exemple.
    Avec DOM seul c'est impossible (il faudrait le combiner à l'extension XSL et une feuille XSLT voire passer par un tableau, moyennant pas mal de travail).

    Citation Envoyé par Klimium
    Tant qu'on y est, comment faire pour afficher seulement 5 noeuds par exemple ?
    Avec une itération ou une expression XPath (via position()).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Merci, et si au lieu de vouloir trier par date, je veux que les premiers passent derniers .. (dans l'ordre inverse quoi) ..?
    C'est possible avec seulement DOM ?

    Sinon si tu as le temps, pourrais-tu me faire un exemple ou me montrer un bon tuto pour xsl .. Merci.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Klimium
    Merci, et si au lieu de vouloir trier par date, je veux que les premiers passent derniers .. (dans l'ordre inverse quoi) ..?
    C'est possible avec seulement DOM ?
    Oui mais ça dépend de la structure de votre document :
    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
    <?php
    $dom = new DomDocument;
    $dom->preserveWhiteSpace = FALSE;
    $dom->formatOutput = TRUE;
    $dom->load('dates.xml');
     
    $xpath = new DomXPath($dom);
    $dates = $xpath->query('/dates/date');
    $pile = array();
    foreach ($dates as $date) {
        if (!isset($pere)) {
            $pere = $date->parentNode;
        }
        array_unshift($pile, $pere->removeChild($date));
    }
    foreach ($pile as $v) {
        $pere->appendChild($v);
    }
     
    header('Content-type: text/plain');
    echo $dom->saveXML();
    ?>
    Avec le document XML particulier :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <dates>
    	<date id="21/06/2007">Après demain</date>
    	<date id="20/06/2007">Demain</date>
    	<date id="19/06/2007">Aujourd'hui</date>
    	<date id="18/06/2007">Hier</date>
    	<date id="17/06/2007">Avant hier</date>
    </dates>
    On obtient :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <dates>
      <date id="17/06/2007">Avant hier</date>
      <date id="18/06/2007">Hier</date>
      <date id="19/06/2007">Aujourd'hui</date>
      <date id="20/06/2007">Demain</date>
      <date id="21/06/2007">Après demain</date>
    </dates>

    Citation Envoyé par Klimium
    Sinon si tu as le temps, pourrais-tu me faire un exemple ou me montrer un bon tuto pour xsl ..
    Consultez les tutoriaux de la rubrique XML ou interrogez Google.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Tu as du mal comprendre
    Je veux pas modifier le fichier, juste l'affichage sur la page ..

    C'est possible quand même je suppose ..

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Klimium
    Je veux pas modifier le fichier, juste l'affichage sur la page ..
    C'est ce qu'il fait (à défaut de connaître les méthodes, on reconnaît les fonctions echo et header pour un simple affichage) Le but d'un parsing DOM est de charger le document XML sous la forme d'un arbre en mémoire. C'est cet arbre qu'on manipule. Vous êtes libres de faire ce que bon vous semble des modifications apportées à cet arbre (l'afficher, le sauvegarder ou non - écraser ou non, ...).

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Ah oki,
    C'est parce que j'avais vu saveXML ..
    Merci j'essaierai ça ce soir ou demain,
    Merci encore

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Je viens d'essayer pour limiter le nombre de noeuds a prendre. Le problème c'est que çalà ne m'en séléctionne qu'un seul.
    avec [position()=XX] j'ai essayer [position()<XX][position()>XX] mais là erreur ..

    J'ai comme données le n° du premier noeud a prendre et le nombre que je dois en prendre ..

    Can I help me ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Klimium
    Can I help me ?
    Que proposez-vous ?

    Soit ce fichier xml :
    Code XML : 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
    <a>
    	<b id="1"/>
    	<b id="2"/>
    	<b id="3"/>
    	<b id="4"/>
    	<b id="5"/>
    	<b id="6"/>
    	<b id="7"/>
    	<b id="8"/>
    	<b id="9"/>
    	<b id="10"/>
    	<b id="11"/>
    	<b id="12"/>
    	<b id="13"/>
    	<b id="14"/>
    	<b id="15"/>
    	<b id="16"/>
    	<b id="17"/>
    	<b id="18"/>
    	<b id="19"/>
    	<b id="20"/>
    </a>

    Soit le code suivant pour prendre 4 éléments b à partir du troisième :
    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
    <?php
    header('Content-type: text/plain');
     
    $debut = 3;
    $nombre = 4;
    $fin = $debut + $nombre;
     
    $dom = new DomDocument;
    $dom->preserveWhiteSpace = FALSE;
    $dom->formatOutput = TRUE;
    $dom->load('pagination_simplexml.xml');
     
    $xpath = new DomXPath($dom);
    foreach ($xpath->query("/a/b[position() >= $debut and position() < $fin]") as $n) {
        printf("%s (id = %s)\n", $n->nodeName, $n->getAttribute('id'));
    }
    ?>
    Résultat :
    b (id = 3)
    b (id = 4)
    b (id = 5)
    b (id = 6)

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Points : 65
    Points
    65
    Par défaut
    Parfais,
    Merci

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Probleme DOM
    Bonjour j ai un soucis avec le XML et DOM. J'ai un fichier dans lequel je stocke un XML. dans ce XML je désirerai changer l'ordre de 2 noeuds. Cela est-il possible ????

    AVANT :

    <CONTENTS>
    - <Content>
    <Type>Folder1</Type>
    <Cle>/1</Cle>
    <Name>1</Name>
    <Url />
    </Content>
    - <Content>
    <Type>Folder2</Type>
    <Cle>/2</Cle>
    <Name>2</Name>
    <Url />
    </Content>
    - <Content>
    <Type>Folder3</Type>
    <Cle>/3</Cle>
    <Name>3</Name>
    <Url />
    </Content>
    </CONTENTS>

    Après Modif je voudrais ceci :

    <CONTENTS>
    - <Content>
    <Type>Folder2</Type>
    <Cle>/2</Cle>
    <Name>2</Name>
    <Url />
    </Content>
    - <Content>
    <Type>Folder1</Type>
    <Cle>/1</Cle>
    <Name>1</Name>
    <Url />
    </Content>
    - <Content>
    <Type>Folder</Type>
    <Cle>/3</Cle>
    <Name>3</Name>
    <Url />
    </Content>
    </CONTENTS>

    J'ai mis cette question ailleurs sur le forum mais je n'étais pas sur de sa bonne place.
    Donc je sais pas comment faire : échanger les noeuds ou alors récupérer les valeurs de chaque sous-noeud pour les affecter au sous-noeud souhaité et vice versa .... Je ne sais pas du tout comment faire ni si cela est possible ....
    Je vous remercie par avance de votre aide.
    Cordialement

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

Discussions similaires

  1. XML signature, DOM et noeuds null
    Par Saita dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 30/06/2010, 11h01
  2. DOM, suprimer noeud mais pas le contenu
    Par junix dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/08/2009, 08h37
  3. [Java] Obtenir le XPath d'un noeud DOM
    Par krappa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/09/2005, 16h06
  4. [DOM] Accès au contenu textuel d'un noeud avec DOM
    Par comexe2 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/07/2004, 15h41
  5. Réponses: 2
    Dernier message: 05/06/2004, 11h56

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