7
votes

Comment obtenir toutes les informations dans XML dans le dictionnaire avec Python

Disons que j'ai un fichier XML comme suit. XXX Pré>

J'ai besoin de lire ce fichier dans un dictionnaire quelque chose comme ça. P>

dict["A.B1.C1"] = "blah"
dict["A.B1.C2"] = "blah"
dict["A.B2.C1"] = "blah"
dict["A.B2.C2"] = "blah"


1 commentaires

Semble étroitement liée à ces questions: Modification XML comme dictionnaire Python? (comme indiqué par Leniel), et Un moyen vraiment simple de traiter avec XML dans Python? (comme indiqué par NAS)


4 Réponses :


5
votes

I Habituellement analyser XML à l'aide du module Elementtree sur la bibliothèque standard. Il ne vous donne pas un dictionnaire, vous obtenez une structure DOM beaucoup plus utile qui vous permet d'itérer sur chaque élément pour les enfants.

{'A1': '\n \n <...>\n',
 'A1.B1': '\n  \n  <...>\n ',
 'A1.B1.C1': '"blah"',
 'A1.B1.C2': '"blah"',
 'A1.B2': '\n  \n  <...>\n ',
 'A1.B2.C1': '"blah"',
 'A1.B2.C2': '"blah"'}


1 commentaires

Typo ci-dessus, devrait être "gretroot ()", pas "get_root ()"



5
votes

J'utilise habituellement le bibliothèque LXML.Objectify pour une analyse rapide XML.

avec votre String XML, vous pouvez faire: p> xxx pré>

puis obtenir des éléments individuels à l'aide d'une interface de dictionnaire: p> xxx pré>

ou, si Vous préférez: P>

value = root.A[0].B[0].C[0]


0 commentaires

0
votes

Consultez les réponses à Un moyen vraiment simple de traiter avec XML à Python? , vous en trouverez probablement l'un d'entre eux pour répondre directement à vos besoins.


0 commentaires

6
votes

Vous pouvez utiliser Bibliothèque forte> en Python. tong.parse () strud> convertit un document XML en un objet Python

Ceci prend un fichier XML en entrée et renvoie un objet Python qui représente ce document XML. P>

prête Après un fichier XML à titre d'exemple et le nom comme test_xml.xml p>

>>>import untangle

>>>input_file = "/home/tests/test_xml.xml" #Full path to your xml file
>>>obj = untangle.parse(input_file)

>>>obj.A.B[0].C[0].cdata
u'"blah1"'
>>> obj.A.B[0].C[1].cdata
u'"blah2"'
>>> obj.A.B[1].C[0].cdata
u'"blah3"'
>>> obj.A.B[1].C[1].cdata
u'"blah4"'


0 commentaires