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] Tri numérique dans un fichier xml


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    apprenti webmaster
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti webmaster

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut [DOM] Tri numérique dans un fichier xml
    Bonjour

    Je voudrais ordonner numériquement mon fichier qui se présente ainsi :
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <ul>
      <li>
        <a href="img/images/2.jpg">
          <img src="img/thumbs/2.jpg" alt="2"/>
        </a>
      </li>
      <li>
        <a href="img/images/12.jpg">
          <img src="img/thumbs/12.jpg" alt="12"/>
        </a>
      </li>
      <li>
        <a href="img/images/1.jpg">
          <img src="img/thumbs/1.jpg" alt="1"/>
        </a>
      </li>
      <li>
        <a href="img/images/39.jpg">
          <img src="img/thumbs/39.jpg" alt="39"/>
        </a>
      </li>
    </ul>
    puis sauver le fichier. Les images seraient alors dans l'ordre suivant : 1, 2, 12, 39

    J'ai fait quelques recherches sur ce forum, notamment en essayant de m'inspirer de ce vieux fil de de discussion :
    http://www.developpez.net/forums/d36...donner-noeuds/
    ... sur d'autres aussi... mais je n'ai pas encore trouvé la solution.

    Merci d'avance pour l'aide !

  2. #2
    Membre régulier
    Homme Profil pro
    conception et traitement de documents xhtml
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : conception et traitement de documents xhtml
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    Dans la mesure où je peux être amené à traiter ce genre de besoin, je propose ci-dessous un code qui fonctionne.
    (Pardon pour le délai : j'ai été très pris cette semaine et n'ai pu me mettre sur le sujet que ce matin.)

    Je livre ici le code brut, sans commentaires. Je fournirai par la suite toute explication demandée.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <?php
     
    $doc = <<<LISTE
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <ul>
      <li>
        <a href="img/images/2.jpg">
          <img src="img/thumbs/2.jpg" alt="2"/>
        </a>
      </li>
      <li>
        <a href="img/images/12.jpg">
          <img src="img/thumbs/12.jpg" alt="12"/>
        </a>
      </li>
      <li>
        <a href="img/images/1.jpg">
          <img src="img/thumbs/1.jpg" alt="1"/>
        </a>
      </li>
      <li>
        <a href="img/images/39.jpg">
          <img src="img/thumbs/39.jpg" alt="39"/>
        </a>
      </li>
    </ul>
    LISTE;
     
    $doc_xhtml = new DOMDocument();
    $doc_xhtml -> loadXML($doc);
     
    $liste_triee = new DOMDocument('1.0', 'ISO-8859-1');
     
    $ul = $doc_xhtml -> getElementsByTagName('ul') -> item(0);
     
    foreach($ul -> getElementsByTagName('li') as $li)
    {
    	$a_href = $li -> getElementsByTagName('a') -> item(0) -> getAttribute('href');
    	$regex = '#img/images/([0-9]+)\.jpg#';
    	preg_match($regex, $a_href, $numero);
     
    	$numero = $numero[1];
     
    	if($liste_triee -> hasChildNodes() == false)
    	{
    		$liste_triee -> appendChild($liste_triee -> createElement('ul'));
    		$nouveau_li = $liste_triee -> importNode($li, true);
    		$liste_triee -> getElementsByTagName('ul') -> item(0) -> appendChild($nouveau_li);
    	}
    	else
    	{
    		$li_place = false;
    		foreach($liste_triee -> getElementsByTagName('ul') -> item(0) -> childNodes as $li_test)
    		{
    			$a_href_li_test = $li_test -> getElementsByTagName('a') -> item(0) -> getAttribute('href');
    			$regex = '#img/images/([0-9]+)\.jpg#';
    			preg_match($regex, $a_href_li_test, $numero_li_test);
    			$numero_li_test = $numero_li_test[1];
     
    			if($numero <= $numero_li_test)
    			{
    				$nouveau_li = $liste_triee -> importNode($li, true);
    				$li_test -> parentNode -> insertBefore($nouveau_li, $li_test);
    				$li_place = true;
    				break;
    			}
    		}
     
    		if($li_place == false)
    		{
    			$nouveau_li = $liste_triee -> importNode($li, true);
    			$liste_triee -> getElementsByTagName('ul') -> item(0) -> appendChild($nouveau_li);
     
    		}
    	}
    }
     
    echo $liste_triee -> saveXML();
     
    ?>
    Le code généré est bien trié comme demandé :
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <ul><li>
        <a href="img/images/1.jpg">
          <img src="img/thumbs/1.jpg" alt="1"/>
        </a>
      </li><li>
        <a href="img/images/2.jpg">
          <img src="img/thumbs/2.jpg" alt="2"/>
        </a>
      </li><li>
        <a href="img/images/12.jpg">
          <img src="img/thumbs/12.jpg" alt="12"/>
        </a>
      </li><li>
        <a href="img/images/39.jpg">
          <img src="img/thumbs/39.jpg" alt="39"/>
        </a>
      </li></ul>
    PS : Merci pour le plaisir procuré

  3. #3
    Futur Membre du Club
    Homme Profil pro
    apprenti webmaster
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti webmaster

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    ... avec un retard certain (!) : merci beaucoup pour ta réponse Doc_xhtml... entre temps je m'étais orienté vers une autre solution de mon problème, mais je garde la tienne "en réserve".

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

Discussions similaires

  1. [AS2]valeur numérique dans un fichier XML
    Par dom_dev dans le forum Flash
    Réponses: 3
    Dernier message: 03/05/2009, 04h49
  2. [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
  3. [DOM] Modifier un noeud dans un fichier XML
    Par erivoil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/01/2007, 12h11
  4. [DOM XML] Comment écrire dans un fichier XML ?
    Par morgiane dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/11/2006, 11h32
  5. [DOM] Enregistrer un Document dom dans un fichier xml
    Par java_girl dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 09/09/2006, 20h38

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