ScolaSync  1.0
sconet.py
Aller à la documentation de ce fichier.
00001 #!/usr/bin/python
00002 # -*- coding: utf-8 -*-
00003 
00004 import xml.dom.minidom
00005 
00006 ##
00007 # 
00008 #     Une classe pour travailler avec des données Sconet
00009 #     
00010 class Sconet:
00011 
00012     ##
00013     # 
00014     #         Le constructeur
00015     #         @param file le nom d'un fichier, ou un fichier ouvert en lecture
00016     #         
00017     def __init__(self, file):
00018         if type(file)==type(""):
00019             file=open(file,"r")
00020         self.donnees=xml.dom.minidom.parse(file)
00021         self.makeCompact()
00022 
00023     ##
00024     # 
00025     #         removes useless thext nodes containing only spaces.
00026     #         
00027     def makeCompact(self):
00028         self.nullTexts={}
00029         self.elementsWalk(self.donnees.documentElement, self.collectNullTexts)
00030         for el in self.nullTexts.keys():
00031             for e in self.nullTexts[el]:
00032                 el.removeChild(e)
00033 
00034     def collectNullTexts(self,el):
00035         self.nullTexts[el]=[]
00036         for e in el.childNodes:
00037             if e.nodeType==e.TEXT_NODE and e.data.strip()=="":
00038                 self.nullTexts[el].append(e)
00039 
00040     ##
00041     # 
00042     #         @return the list of classes containg students
00043     #         
00044     def collectClasses(self):
00045         self.classes=set()
00046         self.elementsWalk(self.donnees.documentElement, self.collectOneClass)
00047         return self.classes
00048 
00049     ##
00050     # 
00051     #         @return the name of a class if it is a class with students
00052     #         
00053     def collectOneClass(self,el):
00054         if el.nodeName.lower()=="structure":
00055             if el.getElementsByTagName("TYPE_STRUCTURE")[0].firstChild.data=="D":
00056                 self.classes.add(el.getElementsByTagName("CODE_STRUCTURE")[0].firstChild.data)
00057 
00058 
00059 
00060     ##
00061     # 
00062     #         implemente un parcour des éléments d'un arbre, pour y appliquer
00063     #         une procédure
00064     #         @param el un élément
00065     #         @param proc la procédure à appliquer (paramètres : l'élément)
00066     #         
00067     def elementsWalk(self, el, proc):
00068         proc(el)
00069         for e in el.childNodes:
00070             self.elementsWalk(e, proc)
00071 
00072     def __str__(self):
00073         return self.donnees.toprettyxml(indent="  ",encoding="utf-8")
00074 
00075 
00076 if __name__=="__main__":
00077     s=Sconet("SCONET_test.xml")
00078     # print s
00079     print s.collectClasses()
00080 
 Tout Classes Espaces de nommage Fichiers Fonctions Variables