2017-10-19 114 views
0

我解析的xml文件中的一些元素具有自己的xmlns属性,但每当我解析并写回文件时,xmlns都会被删除,而我会得到一个ns3:前缀和一个新的命名空间添加在顶部。Stop ElementTree从元素中移除名称空间

XML文件我读的头:

<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"> 

输出的头,我得到:

<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"> 

我的命名空间声明:

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") 

我想要:

<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"> 

什么我现在越来越:

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

我怎样才能获得的xmlns =属性回到我的元素和输出文档的头部?

回答

0

oval:ns3:是命名空间前缀,不命名空间。命名空间前缀本身并不重要;它只能通过 命名空间(例如http://oval.mitre.org/XMLSchema/oval-definitions-5#windows)绑定到它们的 它们的含义。没有兼容的XML处理器会关心特定的命名空间前缀(仅限于它们绑定到的命名空间URI),您和您所编写的软件也不应该。

同样,通过命名空间前缀控制默认命名空间与显式命名空间的使用也是一个区别(假设默认命名空间对后代元素的继承保持不变)。

参见:Why does xml package modify my xml file in Python3?

+0

以上是正确的,但我觉得OP:主要的问题是,ElementTree的,在一个恼人的方式 命名空间声明拨弄。请参阅 https://stackoverflow.com/q/45990761/407651,https://stackoverflow.com/q/38438921/407651, https://stackoverflow.com/q/41395332/407651。 – mzjn

+1

@mzjn:ElementTree完全可以进行此类更改。然而,我确实同意,在某种程度上,令人惊讶的是有点不理想。我已经添加了一个链接,供您参考。谢谢。 – kjhughes

相关问题