Bonjour,
Je veux créer un fichier XML qui prendrait ces informations d'un autre fichier XML.
Ceci a pour but de ne conserver que les informations importantes (supprimer les balises inutiles) et de rendre le code plus lisible par un humain (refactorisation des noms de balises)
Le code en XML:
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <?xml version="1.0"?> <window name="INCO_VEHICAL_DETAIL" page="FIRST" page-id="001"> <table name="_TEMPLATE3" style="SYSTEM"> <tbody> <tr row="1"> <tc cell="1"> <text name="_TEXT11" style="SYSTEM" lang="EN"> <p name="L">INCOTERM: <sym name="GV_INCOTERM">DAP/Dummy Location</sym></p> <p name="L">Vehicle Plate:<sym name="GV_VEHICAL_PLATE">TEST_VEHICLE</sym></p> <p name="L">Container ID :<sym name="GV_CONTAINER_ID">TEST_CONTAINER1</sym></p> <p name="L"/> </text> </tc> <tc cell="2"> <text name="_TEXT12" style="SYSTEM" lang="EN"> <p name="L">Seal No:<sym name="GV_SEAL_NO">TEST_SEAL_</sym></p> <p name="L">TARE Weight:<sym name="GV_TARE_WEIGHT">TES</sym></p> </text> </tc> </tr> </tbody> </table> </window>
Et je voudrais obtenir ceci :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <INCO_VEHICAL_DETAIL> <_TEMPLATE3> <_TEXT11> <GV_INCOTERM>DAP/Dummy Location</GV_INCOTERM> <GV_VEHICAL_PLATE>TEST_VEHICLE</GV_VEHICAL_PLATE> <GV_CONTAINER_ID>TEST_CONTAINER1</GV_CONTAINER_ID> </_TEXT11> <_TEXT12> <GV_SEAL_NO>TEST_SEAL_</GV_SEAL_NO> <GV_TARE_WEIGHT>TES</GV_TARE_WEIGHT> </_TEXT12> </_TEMPLATE3> </INCO_VEHICAL_DETAIL>
J'ai commencé à faire le script python ci-dessous mais j'ai un problème. Si je veux supprimer un élément (balise "p" par exemple ou encore "tc", "tr" etc...), cela supprimera l'élément enfant (sym) qui contient des données. Je suis un débutant en python et xml et je m'accroche à plusieurs jours malgré des heures de tutoriels ou de forums ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 import lxml.etree as xmlParser xmlDoc = xmlParser.parse('NewFile.xml') rootElement = xmlDoc.getroot() #refactor tag and delete attrib for element in rootElement.iter('window'): element.tag = element.attrib['name'] element.attrib.pop('name') element.attrib.pop('page') element.attrib.pop('page-id') for element in rootElement.iter('table'): element.tag = element.attrib['name'] element.attrib.pop('name') element.attrib.pop('style') for element in rootElement.iter('text'): element.tag = element.attrib['name'] element.attrib.pop('name') element.attrib.pop('style') element.attrib.pop('lang') #for element in rootElement.iter('p'): # rootElement.remove(element) for element in rootElement.iter('sym'): element.tag = element.attrib['name'] element.attrib.pop('name') xmlDoc.write('out.xml')
Ce qui donne le résultat :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <INCO_VEHICAL_DETAIL> <_TEMPLATE3> <tbody> <tr row="1"> <tc cell="1"> <_TEXT11> <p name="L">INCOTERM: <GV_INCOTERM>DAP/Dummy Location</GV_INCOTERM></p> <p name="L">Vehicle Plate:<GV_VEHICAL_PLATE>TEST_VEHICLE</GV_VEHICAL_PLATE></p> <p name="L">Container ID :<GV_CONTAINER_ID>TEST_CONTAINER1</GV_CONTAINER_ID></p> <p name="L"/> </_TEXT11> </tc> <tc cell="2"> <_TEXT12> <p name="L">Seal No:<GV_SEAL_NO>TEST_SEAL_</GV_SEAL_NO></p> <p name="L">TARE Weight:<GV_TARE_WEIGHT>TES</GV_TARE_WEIGHT></p> </_TEXT12> </tc> </tr> </tbody> </_TEMPLATE3> </INCO_VEHICAL_DETAIL>
Auriez vous des idées?
Partager