2017-10-19 7 views
0

Certains de mes éléments dans le fichier xml je suis analyse syntaxique ont leur propre attribut xmlns, mais chaque fois que j'analyser et d'écrire le fichier en arrière, les xmlns sont enlevés et place je reçois un ns3: préfixe et nouvel espace de noms est ajouté en haut.arrêt namespace suppression ElementTree des éléments

La tête du fichier XML que je lis:

<oval_definitions xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5" xmlns:oval="http://oval.mitre.org/XMLSchema/oval-common-5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://oval.mitre.org/XMLSchema/oval-common-5 http://oval.mitre.org/language/download/schema/version5.8/ovaldefinition/complete/oval-common-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5 http://oval.mitre.org/language/download/schema/version5.8/ovaldefinition/complete/oval-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5#windows http://oval.mitre.org/language/download/schema/version5.8/ovaldefinition/complete/windows-definitions-schema.xsd"> 

La tête de la sortie que je reçois:

<oval_definitions xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5" xmlns:ns3="http://oval.mitre.org/XMLSchema/oval-definitions-5#windows" xmlns:oval="http://oval.mitre.org/XMLSchema/oval-common-5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://oval.mitre.org/XMLSchema/oval-common-5 http://oval.mitre.org/language/download/schema/version5.8/ovaldefinition/complete/oval-common-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5 http://oval.mitre.org/language/download/schema/version5.8/ovaldefinition/complete/oval-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5#windows http://oval.mitre.org/language/download/schema/version5.8/ovaldefinition/complete/windows-definitions-schema.xsd"> 

Mes déclarations d'espace de noms:

ET.register_namespace('', "http://oval.mitre.org/XMLSchema/oval-definitions-5") 
ET.register_namespace('oval', "http://oval.mitre.org/XMLSchema/oval-common- 5") 
ET.register_namespace('xsi', "http://www.w3.org/2001/XMLSchema-instance") 
ET.register_namespace('xsi:schemaLocation', "http://oval.mitre.org/XMLSchema/oval-common-5 http://oval.mitre.org/language/download/schema/version5.8/ovaldefinition/complete/oval-common-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5 http://oval.mitre.org/language/download/schema/version5.8/ovaldefinition/complete/oval-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5#windows http://oval.mitre.org/language/download/schema/version5.8/ovaldefinition/complete/windows-definitions-schema.xsd") 

Ce que je veulent:

<registry_state xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5#windows" id="oval:mil.disa.fso.windows:ste:397100" version="2" comment="Reg_Dword type and value equals 0"> 

Ce que je veux maintenant:

<ns3:registry_state comment="Reg_Dword type and value equals 0" id="oval:mil.disa.fso.windows:ste:397100" version="2"> 

Comment puis-je obtenir les xmlns = attribut de nouveau dans mes éléments et hors de la tête du document?

Répondre

0

oval: et ns3: sont namespace préfixes, pas espaces de noms. Les préfixes d'espace de noms sont insignifiants; il est seulement par l'espace de noms (par exemple http://oval.mitre.org/XMLSchema/oval-definitions-5#windows) auquel ils sont liés qu'ils tirent sens. Les processeurs XML compatibles ne se soucient pas du préfixe d'espace de nom spécifique (uniquement les URI d'espace de noms auxquels ils sont liés), et vous ne devriez pas non plus écrire le logiciel. De même, le contrôle de l'utilisation d'un espace de noms par défaut par rapport à un espace de noms explicite via un préfixe d'espace de noms est également une différence (en supposant que l'équivalence est préservée avec l'héritage des espaces descendants).

Voir aussi: Why does xml package modify my xml file in Python3?

+0

Ce qui précède est correct, mais je pense que l'OP: le principal problème est que ElementTree tripote déclarations d'espace de noms d'une manière ennuyeux. Voir https://stackoverflow.com/q/45990761/407651, https://stackoverflow.com/q/38438921/407651, https://stackoverflow.com/q/41395332/407651. – mzjn

+1

@mzjn: ElementTree est parfaitement dans son droit de faire de tels changements. Je suis d'accord, cependant, qu'à un certain niveau, il est surprenant un peu non-idéal. J'ai ajouté un lien à votre réponse pour référence. Je vous remercie. – kjhughes