analyse XML expat dans les données de traitement de python
-
16-09-2019 - |
Question
Je cherche à analyser un fichier XML à l'aide expat python. J'ai la ligne suivante dans mon fichier XML:
<Action><fail/></Action>
expat identifie les balises de début et de fin, mais convertit < à moins que le caractère et la même chose pour plus de caractère et parse donc comme ceci:
résultat:
START 'Action'
DATA '<'
DATA 'fail/'
DATA '>'
END 'Action'
au lieu du produit souhaité:
START 'Action'
DATA '<fail/>'
END 'Action'
Je voudrais avoir le résultat souhaité, comment empêcher expat de chambouler?
La solution
expat ne pas gâcher, <
est tout simplement l'encodage XML pour le caractère <
. Bien au contraire, si expat retournerait le <
littéral, ce serait un bug par rapport à la spécification XML. Cela étant dit, vous pouvez d'obtenir bien sûr la version échappée de retour en utilisant xml.sax.saxutils.escape
:
>>> from xml.sax.saxutils import escape
>>> escape("<fail/>")
'<fail/>'
L'analyseur expat est également libre de signaler toutes les données de chaîne dans tout morceaux il semble en forme, vous devez les concaténer vous.
Autres conseils
Les deux parseurs SAX et StAX sont libres de briser les chaînes de quelque manière qui leur convient (bien que Stax dispose d'un mode COALESCE pour le forcer à assembler les pièces pour vous).
La raison en est qu'il est souvent possible d'écrire un logiciel dans certains cas, que les cours d'eau et ne doit pas se soucier de la surcharge de réassemblage des fragments de chaîne.
En général, j'accumuler du texte dans une variable et utiliser le contenu quand je vois le prochain événement startElement ou EndElement. À ce moment-là, je réinitialise aussi la variable texte accumulé à vide.