默认命名空间和前缀命名空间共享相同的URI - 需要使用python从元素中单独删除默认命名空间URI

时间:2017-01-25 09:57:29

标签: xml python-2.7 lxml xml-namespaces

默认的命名空间和前缀命名空间共享相同的URI。

XML:

.
.
parallelUploads: 20,    
maxFilesize: 2, 
maxFiles: 20,
.
.

我需要从元素标记中单独删除默认命名空间。由于默认和前缀命名空间uri都相同,下面的代码也删除了前缀命名空间。:(

我的代码:

<Envelope xmlns="http://www.ibm.com/mdm/schema" xmlns:sch="http://www.ibm.com/mdm/schema">
<sch:requesterName>cusadmin</sch:requesterName>
<sch:requesterLanguage>100</sch:requesterLanguage>
<sch:requestOrigin>QAOffshore</sch:requestOrigin>
<QuestionId>472</QuestionId>
</Envelope>

输出:

from lxml import etree
import re
df_temp1=[]
root_ns=etree.iterparse(open("D:\\Sample_data\\XML\\data_stack.xml",'r'),events=['start-ns'])
for _, node in root_ns:
    if(node[0]==''):
        df_temp1.append(node[1])
tree=etree.parse(open("D:\\Sample_data\\XML\\data_stack.xml",'r'))
for e in tree.iter():
        #if element has default namespace--remove the default namespace
        if '{' in e.tag:
            names = e.tag.split('}', 1)[0]
            names1=re.sub("[\{\}]","",names)
            if(names1 in df_temp1):
                e.tag=e.tag.split('}', 1)[1]
        print e.tag

预期结果:

Envelope
requesterName
requesterLanguage
requestOrigin
QuestionId

有关如何获得此预期输出的任何想法吗?

1 个答案:

答案 0 :(得分:0)

要删除名称空间前缀“ sch ”,您必须注册名称空间,如下所示 -

ET.register_namespace('', "http://www.ibm.com/mdm/schema")