Listing récursif d'un XML avec XSLT

Résolu/Fermé
Shadowxvii - 2 mai 2011 à 21:05
creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 - 3 mai 2011 à 13:21
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 samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
2 mai 2011 à 21:08
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
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 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par mpmp93 le 3/05/2011 à 10:11
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 samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
3 mai 2011 à 12:37
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 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
3 mai 2011 à 12:43
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 samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
3 mai 2011 à 13:21
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 samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
2 mai 2011 à 21:36
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