[Python] Aide pour parsing fichier XML

Bonjour,

Voilà, cela fait un moment que je planche pour comment parser le fichier xml un peu particulier. J’ai essayé avec Element tree sans succès, mais j’ai réussi à obtenir qqch avec minidom.

Voici le lien avec le fichier XML (imposé par un instrument et sur lequel je n’ai pas de possibilité d’influer sur son formatage) et deux scripts python. Les deux posent problème pour la même raison.

https://www.swisstransfer.com/d/ffbf5f85-fe0e-43ad-94da-d8152d1bd80b

Si l’un des groupe est vide, le script met une erreur. Si je modifie le fichier XML pour mettre des infos dans toutes les balises , le script s’exécute.

Il y aurait-il un moyen de modifier le script pour « sauter » les groupes vides ?

Merci de votre aide,
Daniel

hello,

à l’aide du lien donné en source, j’ai bidouillé un code qui semble digérer les tags vides :

#!/usr/bin/env python3
from xml.dom.minidom import parse, parseString

def getText(nodelist):
    rc = []
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc.append(node.data)
    return ''.join(rc)

dom1 = parse('data1.xml')
Table = dom1.documentElement

cells = Table.getElementsByTagName('Cell')

for cell in cells:
   if cell.getElementsByTagName('Data')[0].childNodes :
      data = cell.getElementsByTagName('Data')[0].childNodes
      print(getText(data))
   else :
      print("tag vide !")

source : xml.dom.minidom — Minimal DOM implementation — Python 3.11.4 documentation

1 « J'aime »

Moi connaissant mieux PHP, j’aurais fais un script pour recevoir le XML, et le transformer en JSon, qui ce travail bien avec Python :slight_smile:

Bonjour bof,

Merci pour votre aide, c’est super !

Je peux commencer à passer à l’étape suivante qui est de créer des variables qui associent certaines valeurs retournées suite à ce script sur le fichier XML.

Par exemple, j’aimerais prendre la ligne 3

Instrument
S/N
20201177880
Location:
Country

et attribuer cette valeur à une variable. Je pensais à exporter l’output dans un fichier texte et faire un autre script pour lire depuis ce fichier texte en ligne par ligne et attribuer les valeurs aux variables choisies. Avez-vous une idée plus directe ?

Merci pour votre retour encore,
bien cordialement,
Daniel

Pour le ligne par ligne: Read a file line by line in Python - GeeksforGeeks
Et pour compléter: Python String | isnumeric() method with Examples - Javatpoint.

en fait suite a ton post, je me suis « pris la tête » à associer les libellés ( Instrument,S/N, etc.) aux datas
pour ça j’ai utilisé ds la boucle for cell in cells: après avoir initialisé a Zéro un indice « i » des tests sur cet indice pour repérer trois parties:

  • le début ['Instrument', 'S/N', '20201177880', 'Location:', 'Country', 'Instrument Version', '5.0|1.7']
  • la partie libellé ( toujours renseignée)
  • et la partie « data » ( avec parfois une donnée)

je l’ai mis dans deux machin python ( je me rappelle jamais si c’est des listes des tupples … :roll_eyes:)
de la forme:

libelle=[]
valeur=[]

comme il y a le même nombre de ligne dans les deux ( à condition qu’on les remplisse aussi quand il n’y a rien ds data) et une fois les zones parcées , dans une boucle l’indice peut servir à rapprocher les libellés des datas correspondantes…

il y a certainement d’autres moyens plus dans l’esprit python mais ça marche !

Clairement j’aurai pu directement te coller le script … mais si tu veux apprendre python, c’est en te prenant la tête sur ce type de problème que tu pourras progresser…

si t’insistes je te posterai quant même ma solution lol on n’est pas des boeufs !

Bonjour Bof,

Désolé du temps de réponse. Au final j’ai qqch qui fonctionne bien, comme tu dis, rien ne vaut mieux que se creuser les méninges en testant différentes choses.

Le plus beau c’est quand après ca marche et sans bugs :slight_smile: !

Merci beaucoup pour votre aide sur le forum et à bientôt sur d’autres sujets !

yes ! comme disait Francis Blanche : « c’est en sciant que léonard devint scie » :wink: