Utilisation de DOM pour fichiers xml
Bonjour,
J'ai parcouru la doc de DOM http://docs.python.org/library/xml.dom.html pour manipuler les fichiers XML. J'ai encore des lacunes.
Par rapport à l'exemple suivant, comment distinguer les vrais feuilles (en mon sens) qui sont entre tags (comme KK encadré par <aixm:gml:pos>) et celles qui n'en sont pas (comme les espaces encadrés par <aixm:ElevatedPoint>).
Ensuite comment modifier une valeur fournie par node.nodeValue, je ne vois que des méthodes pour agir sur des noeuds, moi je veux garder les mêmes noeuds mais changer leur valeur.
Merci de vos éclaircissements
Fichier xml suivant :
Code:
1 2 3 4 5 6
| <message:AIXMBasicMessage xmlns:message="A" xmlns:aixm="B" xmlns:gml="C" gml:id="I">
<aixm:ElevatedPoint srsDimension="2" gml:id="JJ">
<gml:pos srsDimension="3">KK </gml:pos>
<aixm:elevation uom="M">LL</aixm:elevation>
</aixm:ElevatedPoint>
</message:AIXMBasicMessage> |
et le pg python suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Application__:
def __init__(self):
datasource = open("Exec/test.xml")
dom = parse(datasource)
l = dom.documentElement
self.next(l.childNodes)
def next(self,l):
for node in l:
if node.nodeValue != None:
print "nodeName : ",node.parentNode.nodeName," nodeValue : <",node.nodeValue," >"
if node.hasAttributes() == 1:
for attrEntry in node.attributes.items():
print " node : ",node.nodeName," attributes : ",attrEntry[0],attrEntry[-1]
if node.childNodes != []:
self.next(node.childNodes) |
J'obtiens alors les traces suivantes:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| nodeName : message:AIXMBasicMessage nodeValue : <
>
node : aixm:ElevatedPoint attributes : gml:id JJ
node : aixm:ElevatedPoint attributes : srsDimension 2
nodeName : aixm:ElevatedPoint nodeValue : <
>
node : gml:pos attributes : srsDimension 3
nodeName : gml:pos nodeValue : < KK >
nodeName : aixm:ElevatedPoint nodeValue : <
>
node : aixm:elevation attributes : uom M
nodeName : aixm:elevation nodeValue : < LL >
nodeName : aixm:ElevatedPoint nodeValue : <
>
nodeName : message:AIXMBasicMessage nodeValue : <
> |