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 : 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
 
<?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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 
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