Comment parser un fichier XML avec lien Http dans Balise route
Bonjour,
Apres 2 jours à tourner en rond , je me suis décidé à lancer ma première demande d'aide en ligne.
Je bute sur le parsing de fichiers xml qui contiennent une balise root avec un lien http
Extrait ci dessous:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
<?xml version="1.0" encoding="UTF-8"?>
<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">
<fileHeader vendorName="N........" fileFormatVersion="32.435 V10.0">
<fileSender elementType="MTW"/>
<measCollec beginTime="2022-11-27T21:45:00+01:00"/>
</fileHeader>
<measData>
<managedElement/>
<measInfo measInfoId="MTW">
<granPeriod endTime="2022-11-27T22:00:00+01:00" duration="PT900S"/>
<repPeriod duration="PT900S"/>
<measTypes>M1 M2 M3 M4 M5</measTypes>
<measValue measObjLdn="N-147/MT-99/MTW-1">
<measResults>2737 2833 2703 2247 0</measResults>
</measValue>
</measInfo> |
Si j'enlève manuellement la chaine : xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec" dans la première balise, j'arrive très facilement à parser mon fichier et obtenir le résultat escompté. A savoir, obtenir une dataframe Pandas répertoriant l'ensemble des mesures.
Code:
1 2
| measObjLdn measResult granPeriod time
0 N-147/MT-99/MTW-1 2798 2846 2770 1497 0 PT900S 2022-11-27T22:45:00+01:00 |
mon code est construit de cette façon
Code:
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
|
from lxml import etree
import xml.etree.ElementTree as ET
import pandas
patch_sortie= 'C:\\Users\\Documents\\Python Scripts\\recherche file\\sortie\\'
tree = ET.parse(patch_sortie+'1.xml')
tree1 = etree.parse(patch_sortie+'1.xml')
root = tree.getroot()
liste_measObjLdn = []
liste_measResults = []
liste_repPeriod = []
liste_time = []
for dn in tree1.xpath("/measCollecFile/measData/measInfo/measValue"):
liste_measObjLdn.append(dn.get("measObjLdn"))
for c in root.iter('measResults'):
liste_measResults.append(c.text)
for pts in tree1.xpath("/measCollecFile/measData/measInfo/granPeriod"):
liste_repPeriod.append(pts.get("duration"))
for time in tree1.xpath("/measCollecFile/measData/measInfo/granPeriod"):
liste_time.append(time.get("endTime"))
result = pandas.DataFrame(columns=['measObjLdn','measResult','granPeriod'])
df=result.assign(measObjLdn=liste_measObjLdn,measResult=liste_measResults,granPeriod=liste_repPeriod,time=liste_time)
print (df) |
Malheureusement, il ne fonctionne pas si j'utilise le fichier originel avec la balise root complète. Avez vous une idée pour que je puisse adapter mon code afin de prendre en compte cette balise ?
Si je n'avais qu'un fichier qu'à parser , cela ne me bloquerait dans la suite de l'exercice, mais j'en ai plus d'une soixantaine à traiter et chaque fichier comporte au moins 200 équipements que je dois ajouter dans ma dataframe
merci pour votre aide