TP4 : Collections et arbres


1. Indexation de balises XML

Ecrivez un programme qui lit un fichier XML et qui affiche la liste des balises utilisées dans ce document. Chaque balise doit être accompagnée d'une liste des sections où elle apparaît et du nombre d'occurrences de celle-ci dans le document. Le programme doit ensuite afficher la liste des balises qui correspondent à chaque fréquence.

Un fichier xml pour tester vos programmes

Exemple : fichier livre.xml (imcomplet)
<document>
  <titre>Les vacances en Italie</titre>
  <resume>Journal des peripeties du voyage</resume>
  <section>
    <chapitre>
      <titre>le trajet Genève-Rome en train</titre>
      <paragraphe>
        <titre>la réservation des billets</titre>
        <sous-paragraphe>C'était le bronx à la gare ...<sous-paragraphe>
        <sous-paragraphe><sous-paragraphe>
      </paragraphe>
      <paragraphe>
        <titre>la nuit dans le train</titre>
        <sous-paragraphe>Il faisait trop chaud ...<sous-paragraphe>
        <sous-paragraphe>Trop de bruit pour dormir ...<sous-paragraphe>
        <remarque>...</remarque>
      </paragraphe>
    </chapitre>
    <chapitre>
    </chapitre>
  </section>
  <section>
    <chapitre>
    </chapitre>
    <chapitre>
    </chapitre>
  </section>
(...)
  <section>
    <chapitre>
    </chapitre>
  </section>
</document>

Les balises fermantes (celles dont le nom est précédé d'un '/') ne doivent pas être prises en compte.

Le programme doit afficher un résultat du genre :
<chapitre>
est present dans les sections : 1, 2, 3, 4
nombre total d'occurences dans le document : 8
...
<remarque>
est present dans les sections : 1, 4
nombre total d'occurences dans le document : 3
...
<resume>
n'est present dans aucune section
nombre total d'occurences dans le document : 1
...

balises qui apparaissent 8 fois : <chapitre>, <sous-paragraphe>
balises qui apparaissent 7 fois : <grincement-de-dent>
... (par ordre décroissant du nombre d'occurences)

Indications :


2. Construction d'un arbre

Ecrivez un programme (ou complétez le programme du point 1) qui construit un arbre pour représenter le contenu du document XML. Créez ensuite un Map qui indique pour chaque type de balise son niveau maximum (profondeur) dans l'arbre. Affichez le contenu du Map.

Indications :

Définir une classe Element qui représentera les éléments XML qui forment les noeuds de l'arbre. Exemple (non complet)

class Element {
   String nom; //nom de la balise
   String valeur;  //texte
   List sousElements;

  // construit un élément avec le nom n
  Element(String n) { nom = n; }

  // ajoute un élément se comme sous-élément (à la fin de la liste)
 ajouterSousElement(Element se) {...}

  // créer sous arbre

  // imprimer le sous arbre
}
Une solution avec constructeur récursif (TP4.java)
Une solution avec une pile (TP4pile.java)



15/05/2001
CLMJ