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.