Question

Je cherche à analyser un fichier XML à l'aide expat python. J'ai la ligne suivante dans mon fichier XML:

<Action>&lt;fail/&gt;</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 '&lt;fail/&gt;'
END 'Action'

Je voudrais avoir le résultat souhaité, comment empêcher expat de chambouler?

Était-ce utile?

La solution

expat ne pas gâcher, &lt; est tout simplement l'encodage XML pour le caractère <. Bien au contraire, si expat retournerait le &lt; 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/>")
'&lt;fail/&gt;'

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top