Programmation DOM
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 :
- calcul de statistiques sur le championnat (nombre de journées, de matches, taux de victoires à domicile, etc.) ;
- produire une version XHTML des matches et des résultats ;
- 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)
- Écrire un parser qui compte le nombre de balises ouvrantes dans un document XML quelconque ;
- écrire un parser qui compte le nombre d'occurrences de chaque balise ;
- proposer et tester une fonction qui renvoie la liste des noeuds feuilles d'un arbre DOM ;
- 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 :
- déterminer si un noeud est la racine de l'arbre DOM ou pas ;
- renvoyer la liste des ancêtres d'un noeud (du noeud vers la racine, puis vice-versa) ;
- 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.