Bonjour
Depuis quelques jours je bute sur un problème, malgré ce que je peux lire et (essayer) de comprendre.
Un fichier XML en entrée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?xml version="1.1" encoding="UTF-8"?> <com.ibm.datastage.ai.dtm.ds:DSJobDefSDO xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.ibm.datastage.ai.dtm.ds="http:///com/ibm/datastage/ai/dtm/ds.ecore" xmi:id="134" lastModificationTimestamp="2017-03-16T16:02:09.748+0100" ...> <contains_JobObject xsi:type="com.ibm.datastage.ai.dtm.ds:DSLinkSDO" xmi:id="10" creationTimestamp="2017-03-16T15:06:33.999+0100" ...> <contains_FlowVariable xsi:type="com.ibm.datastage.ai.dtm.ds:DSFlowVariableSDO" xmi:id="100" creationTimestamp="2017-03-16T15:06:33.999+0100" ...> </contains_FlowVariable> </contains_JobObject> </com.ibm.datastage.ai.dtm.ds:DSJobDefSDO>Je récupère bien la valeur d'un attribut par son nom comme "creationTimestamp".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 import xml.etree.cElementTree as ET tree = ET.parse(<le nom complet du fichier) root = tree.getroot() print(root.get('creationTimestamp')) # No problemo for parent in tree.findall('.//contains_JobObject') : print(parent.get('creationTimestamp')) # No problemo for node in parent.findall('./contains_FlowVariable') : print(node.get('creationTimestamp')) # No problemo
Toutefois, c'est là qu'est l'os, je voudrais aussi la valeur de xmi:id
J'en suis à me dire que je vais sérialiser le fichier dans une string (500 fichiers de ~250Ko..) et remplacer chaque "xmi:id" par "xmi_id", mais je ne trouve pas cela très ... ce que vous voulez.
Quelqu'un aurait-il l'amabilité de m'indiquer comment résoudre cela, comme cela se doit d'être fait avec les libs de base ?
Merci d'avance
Partager