Supprimer l'espace de noms et le préfixe de xml dans python en utilisant lxml
J'ai un fichier xml-je besoin pour ouvrir et faire quelques changements, l'un de ces changements est de supprimer l'espace de noms et un préfixe et puis enregistrez le fichier en un autre.
Voici le xml:
<?xml version='1.0' encoding='UTF-8'?>
<package xmlns="http://apple.com/itunes/importer">
<provider>some data</provider>
<language>en-GB</language>
</package>
Je peux faire les autres changements dont j'ai besoin, mais ne peut pas trouver comment faire pour supprimer l'espace de noms et le préfixe. C'est le reusklt xml j'ai besoin de:
<?xml version='1.0' encoding='UTF-8'?>
<package>
<provider>some data</provider>
<language>en-GB</language>
</package>
Et voici mon script qui permet de l'ouvrir et parser le xml et l'enregistrer:
metadata = '/Users/user1/Desktop/Python/metadata.xml'
from lxml import etree
parser = etree.XMLParser(remove_blank_text=True)
open(metadata)
tree = etree.parse(metadata, parser)
root = tree.getroot()
tree.write('/Users/user1/Desktop/Python/done.xml', pretty_print = True, xml_declaration = True, encoding = 'UTF-8')
Alors, comment aurais-je ajouter le code dans mon script qui permettra d'éliminer l'espace de noms et un préfixe?
source d'informationauteur speedyrazor
Vous devez vous connecter pour publier un commentaire.
Remplacer la balise comme Uku Loskit suggère. En outre, l'utilisation lxml.objectiver.deannotate.
Mise à JOUR
Certaines balises comme
Comment
de retour d'une fonction lors de l'accès àtag
attribut. ajouté à la garde. (1)Utilisé un extrait de code de ici
Cette méthode pourrait être facilement étendu pour supprimer tout espace de noms d'attributs par la recherche pour les étiquettes qui commencent par "xmlns"
tout ce que vous devez faire est de:
fois que vous avez obtenir la racine, en utilisant
root = tree.getroot()
Voici deux autres façons d'enlever les espaces de noms. La première utilise la lxml.programme etree.QName helper tandis que la seconde utilise regexes. Ces deux fonctions permettent une option de la liste des espaces de noms pour le match contre. Si aucun espace de noms de la liste est fournie, alors tous les espaces de noms sont supprimés. Attribut clés sont également nettoyés.