Interrogation d’un fichier hprimXML avec python via xpath

Author

gpr

Published

August 16, 2024

import polars as pl
import xml.etree.ElementTree as ET
import os
# Définition du xmlns, namespace XML hprimXML (on fait un alias a <-> http://www.hprim.org/hprimXML)
ns = {'a': 'http://www.hprim.org/hprimXML'}
# Définition des xpath où trouver les données
hprim_actes_mapping = dict(
    patient_ipp = "a:evenementServeurActe/a:patient/a:identifiant/a:emetteur/a:valeur",
    patient_nom_usuel = "a:evenementServeurActe/a:patient/a:personnePhysique/a:nomUsuel",
    patient_prenoms = "a:evenementServeurActe/a:patient/a:personnePhysique/a:prenoms/*",
    patient_date_naissance = "a:evenementServeurActe/a:patient/a:personnePhysique/a:dateNaissance/*",
    venue_iep = "a:evenementServeurActe/a:venue/a:identifiant/a:emetteur/a:valeur",
    venue_date_debut = "a:evenementServeurActe/a:venue/a:entree/a:dateHeureOptionnelle/*",
    venue_ufr = "a:evenementServeurActe/a:venue/a:entree/a:uniteFonctionnelleResponsable/",
    intervention_date_debut = "a:evenementServeurActe/a:intervention/a:debut/*",
    intervention_date_fin = "a:evenementServeurActe/a:intervention/a:fin/*",
    intervention_uf = "a:evenementServeurActe/a:intervention/a:uniteFonctionnelle/a:code",
    actes_ccam = "a:evenementServeurActe/a:actesCCAM/a:acteCCAM/a:codeActe"
)
# 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):
    u = ET.parse(xml_file)
    temp = dict()
    for key in hprim_actes_mapping.keys():
        temp[key] = get_element(u, hprim_actes_mapping.get(key))
    return temp
parse_hprim_xml_actes('pyhprimxml/data/xml_tests/actes/00001.xml')
{'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'}