site de Fabien Torre


Programmation DOM

Exercices sur la programmation DOM en Python.

Accéder aux noeuds du DOM

Extraction de méta-données (sur une idée de Patrick Marty)

Écrire un script Python qui à partir d'un fichier SVG (comme tux ou argentina) fournit les informations suivante :

  • le nom de l'auteur du dessin ;
  • le titre du dessin ;
  • la liste des mots clés qui lui est associée ;
  • le nombre de rectangle utilisés (élément rect) ;
  • la taille de ces rectangles (attributs height et width).

Sortie attendue :

-- le nom de l'auteur --
L'auteur est Rory McCann !
-- le titre du dessin --
Baby Tux
-- les mots clefs --
baby
linux
bird
penguin
mascot
tux
animal
computer
cute
-- les rectangles --
il y en a 4 :
  .  42.034428  x  39.407280
  .  42.034428  x  39.407280
  .  61.150040  x  211.13000
  .  57.995739  x  207.72755

Fonctions utiles

À la suite de l'exercice précédent, il semble opportun de disposer des fonctions Python suivantes :

  • getAttributeValue(n,a) : fournit la valeur de l'attribut nommé a et associé au noeud élément n ;
  • getChildElementsByTagName(n,tag) : fournit la liste des éléments fils du noeud n et nommés tag ;
  • getTextContent(n) : fournit le contenu textuel associé au noeud élément n ;
  • resolveElementsPath(dom,path) : path étant une liste de noms d'éléments (e1,e2,...en), cette fonction fournit les noeuds vérifiant la requête XPath //e1/e2/.../n dans la représentation dom.

Programmer ces fonctions et les utiliser pour reprendre l'exercice précédent.

Le championnat : calcul de statistiques et production XHTML

Écrire un programme Python qui utilise DOM pour lire un fichier de type Foot et produire :

  1. calcul de statistiques sur le championnat (nombre de journées, de matches, taux de victoires à domicile, etc.) ;
  2. produire une version XHTML des matches et des résultats ;
  3. produire pour cette page un sommaire apparaissant en tête de document.

Parcours récursifs de la structure DOM

Caractéristiques de l'arbre DOM (exercice inspiré par Patrick Marty)

  1. Écrire un parser qui compte le nombre de balises ouvrantes dans un document XML quelconque ;
  2. écrire un parser qui compte le nombre d'occurrences de chaque balise ;
  3. proposer et tester une fonction qui renvoie la liste des noeuds feuilles d'un arbre DOM ;
  4. proposer et tester une fonction qui calcule la hauteur d'un arbre DOM.

Caractéristiques d'un noeud (sujet de Patrick Marty)

Écrire et tester les fonctions qui réalisent les tâches suivantes :

  1. déterminer si un noeud est la racine de l'arbre DOM ou pas ;
  2. renvoyer la liste des ancêtres d'un noeud (du noeud vers la racine, puis vice-versa) ;
  3. renvoyer la liste des noeud frères gauches d'un noeud donné.

Parcours d'arbres

Afficher les noeuds d'un document XML suivant les différents parcours possibles d'un arbre. En particulier, vous testerez votre programme sur un document XML représentant une expression arithmétique, comme par exemple :

<expression op="+">
  <value x="5" />
  <expression op="*">
    <value x="7" />
    <value x="6" />
  </expression>
</expression>

Compter des noeuds

Écrire en Python et à l'aide de DOM une fonction qui compte dans un document XML quelconque le nombre de fois où un attribut donné apparaît avec une valeur particulière. Un appel à cette fonction pourrait ressembler à :

xmlfilename = sys.argv[1]
dom         = parse(xmlfilename)

n = CountAttributeValue(dom,'lang','fr')

print n

Modification du DOM et production d'un nouveau document XML

Modifier l'arbre DOM

Reprendre le document Foot :

  • le charger dans une structure DOM ;
  • créer une structure DOM vide ;
  • y placer toutes les informations du fichier d'origine mais organisées par équipe et non plus par journée ;
  • produire un nouveau fichier XML à partir de ce DOM.

Fabien Torre Valid HTML5! Valid CSS!
Accueil > Enseignement > En pratique > Documents numériques > XML > DOM
(contenu mis à jour )
site de Fabien Torre, université de Lille

Description

Survoler un lien de navigation pour lire sa description ici...