import polars as pl
import xml.etree.ElementTree as ET
import os
Interrogation d’un fichier hprimXML avec python via xpath
# Définition du xmlns, namespace XML hprimXML (on fait un alias a <-> http://www.hprim.org/hprimXML)
= {'a': 'http://www.hprim.org/hprimXML'} ns
# Définition des xpath où trouver les données
= dict(
hprim_actes_mapping = "a:evenementServeurActe/a:patient/a:identifiant/a:emetteur/a:valeur",
patient_ipp = "a:evenementServeurActe/a:patient/a:personnePhysique/a:nomUsuel",
patient_nom_usuel = "a:evenementServeurActe/a:patient/a:personnePhysique/a:prenoms/*",
patient_prenoms = "a:evenementServeurActe/a:patient/a:personnePhysique/a:dateNaissance/*",
patient_date_naissance = "a:evenementServeurActe/a:venue/a:identifiant/a:emetteur/a:valeur",
venue_iep = "a:evenementServeurActe/a:venue/a:entree/a:dateHeureOptionnelle/*",
venue_date_debut = "a:evenementServeurActe/a:venue/a:entree/a:uniteFonctionnelleResponsable/",
venue_ufr = "a:evenementServeurActe/a:intervention/a:debut/*",
intervention_date_debut = "a:evenementServeurActe/a:intervention/a:fin/*",
intervention_date_fin = "a:evenementServeurActe/a:intervention/a:uniteFonctionnelle/a:code",
intervention_uf = "a:evenementServeurActe/a:actesCCAM/a:acteCCAM/a:codeActe"
actes_ccam )
# fonction pour extraire un élément qui est prudente (si l'élément n'existe pas, retourne None)
def get_element(tree, element):
try:
return ' '.join(x.text
for x in
tree.findall(element, ns)
)except:
return None
def parse_hprim_xml_actes(xml_file):
= ET.parse(xml_file)
u = dict()
temp for key in hprim_actes_mapping.keys():
= get_element(u, hprim_actes_mapping.get(key))
temp[key] return temp
'pyhprimxml/data/xml_tests/actes/00001.xml') parse_hprim_xml_actes(
{'patient_ipp': '123456789',
'patient_nom_usuel': 'SANDWICK',
'patient_prenoms': 'JOHN',
'patient_date_naissance': '1970-01-01',
'venue_iep': '987654321',
'venue_date_debut': '2024-01-01 08:00:00',
'venue_ufr': '4321',
'intervention_date_debut': '2024-01-01 08:10:00',
'intervention_date_fin': '2024-01-01 09:00:00',
'intervention_uf': '4321',
'actes_ccam': 'EBLA003 YYYY033 EPLF002 NFKA006'}