Listing récursif d'un XML avec XSLT

Résolu
Shadowxvii -  
creadiff Messages postés 445 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je veux afficher sur une page web la liste des noeuds d'un fichier XML à l'aide de XSLT. Je ne peux pas prédire le contenu du fichier XML ni les noms des noeuds.

Si quelqu'un peut m'aider, merci.

A voir également:

3 réponses

creadiff Messages postés 445 Date d'inscription   Statut Membre Dernière intervention   57
 
Quel est le but ?
Ce serait sympa qu'on ait un peu plus d'infos, sinon on ne te sera pas d'une grande aide.
0
Shadowxvii
 
Ce n'est pas plus compliquer que ça en fait. J'ai un fichier XML et je veux afficher seulement le nom de chacun des noeuds sur une page web avec un XSLT. Par exemple, j'ai le fichier XML suivant

<librairie>
<adresse>123 fausse rue</adresse>
<livres>
<livre>
<auteur>nom</auteur>
<titre>Un titre</titre>
<prix>19.99</prix>
</livre>
<livre>
<auteur>un autre nom</auteur>
<titre>Un autre titre</titre>
<prix>14.99</prix>
</livre>
</livres>
</root>

Et je veux une page HTML qui m'affichera le nom des noeuds du XML, à savoir

-librairie
-adresse
-livres
-livre
-auteur
-titre
-prix
-livre
-auteur
-titre
-prix

Le contenu des noeuds du XML n'est pas important pour le moment.
Le problème vient du fait que je ne peux pas savoir d'avance ce que contiendra le XML comme nom de noeuds.

J'espère que c'est maintenant plus clair. Merci
0
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
Bonjour,

Quelque chose comme ceci?

<?php

function afficheRecursif($xmlObj) {
    echo "<ul>";
    foreach ($xmlObj->children() as $child) {
        echo "<li>" . $child->getName() . ": " . $child . "</li>\n";
        if (count($child) != 0) {
            afficheRecursif($child);
        }
    }
    echo "</ul>\n";
}

$xml = <<<EOT
<librairie>
<adresse>123 fausse rue</adresse>
<livres>
<livre>
<auteur>Victor HUGO</auteur>
<titre>les misérables</titre>
<prix>19.99</prix>
</livre>
<livre>
<auteur>Jules VERNES</auteur>
<titre>de la terre à la Lune</titre>
<prix>14.99</prix>
</livre>
</livres>
</librairie>
EOT;

$librairie = simplexml_load_string($xml);

// print_r($librairie);

afficheRecursif($librairie);


ATTENTION: le code source doit im-pé-ra-ti-vement être en encodage UTF8 !!!!

A+
0
creadiff Messages postés 445 Date d'inscription   Statut Membre Dernière intervention   57
 
L'encodage du code source dépend de celui utilisé dans le XML (qu'il soit UTF, ISO ou autre). Il doit également se répercuter au moment du chargement du fichier XML par PHP.
0
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
Il est obligatoire d'encoder en UTF-8, car les fonctions au travers de SimpleXML en PHP 5.x n'acceptent que cet encodage...

Ou alors:

$librairie = simplexml_load_string(utf8_encode($xml));

si le XML source n'est pas encodé UTF8.
0
creadiff Messages postés 445 Date d'inscription   Statut Membre Dernière intervention   57
 
Tu n'as pas spécifié quelle librairie tu utilisais, j'ai donc supposé DOMDocument (puisque c'est ce qui a été évoqué précédemment (et qui a d'ailleurs résolu le sujet)).
0
creadiff Messages postés 445 Date d'inscription   Statut Membre Dernière intervention   57
 
OK, donc il y a une structure connue.

Depuis PHP, tu pourrais parser le XML avec DOMDocument, et ensuite reconstruire le HTML. La manipulation des noeuds avec DOMDocument est très similaires aux opérations sur le DOM faites depuis JavaScript.
0