2010-05-24 6 views
0

J'essaye d'imprimer un fichier XML en utilisant lxml et Python.Se débarrasser de l'encodage en lxml

Voici le code:

>>> from lxml import etree 
>>> root = etree.Element('root') 
>>> child = etree.SubElement(root, 'child') 
>>> print etree.tostring(root, pretty_print = True, xml_declaration = True, encoding = None) 

Sortie:

<?xml version='1.0' encoding='ASCII'?> 
<root> 
    <child/> 
</root> 

Comme vous pouvez le voir, je l'ai déclaré encoding = None, mais il montre encore encoding = 'ASCII' dans la sortie finale. Ce que je suppose est attendu. Si je ne mets pas dans la balise encoding, il montre toujours ASCII.

Y a-t-il un moyen d'obtenir simplement la balise de version XML et non la partie encodage? Je veux la sortie à être comme ceci:

<?xml version='1.0'> 

Répondre

0

Peu importe ce que lxml.etree sort aussi longtemps que c'est XML valide. Si vous voulez vraiment, vous pouvez coller des chaînes de caractères:

'<?xml version="1.0"?>\n' + etree.tostring(root, pretty_print = True, encoding = 'ASCII') 

On ne sait pas pourquoi vous voulez le supprimer, car en fin de compte XML a besoin de savoir ce que charset il est pour donner un sens à quoi que ce soit. Le XML 1.0 spec comprend une méthode de deviner les jeux de caractères, et semble encourager l'utilisation des déclarations codant:

En l'absence de [informations externes], il est une erreur fatale ... pour une entité qui commence par ni Byte Order Mark ni une déclaration d'encodage pour utiliser un codage autre que UTF-8.

...

À moins qu'un encodage est déterminé par un protocole de niveau supérieur, il est également une erreur fatale si une entité XML ne contient aucune déclaration de codage et son contenu n'est pas UTF-8 ou UTF-16 juridique .

+0

Uhm ok. Je vais regarder par-dessus. Merci d'avoir répondu. – user225312

Questions connexes