Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/10/2011, 20h22   #1
Invité de passage
 
Homme
apprenti webmaster
Inscription : 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 : 2
Points : 2
Par défaut Tri numérique dans un fichier xml

Bonjour

Je voudrais ordonner numériquement mon fichier qui se présente ainsi :
Code :
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 !
Celmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2011, 13h40   #2
Membre du Club
 
Homme Boris
conception et traitement de documents xhtml
Inscription : août 2011
Messages : 107
Détails du profil
Informations personnelles :
Nom : Homme Boris
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 : 59
Points : 59
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 :
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 :
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é
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2011, 09h07   #3
Invité de passage
 
Homme
apprenti webmaster
Inscription : 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 : 2
Points : 2
... 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".
Celmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h45.


 
 
 
 
Partenaires

Hébergement Web