2017-01-25 93 views
0

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

XML:

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

我需要从元素标签单独删除默认的命名空间。因为默认和前缀命名空间URI是一样的,下面的代码删除前缀名字空间太:(

我的代码:

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 

预期结果:

Envelope 
{http://www.ibm.com/mdm/schema}requesterName 
{http://www.ibm.com/mdm/schema}requesterLanguage 
{http://www.ibm.com/mdm/schema}requestOrigin 
QuestionId 

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

+0

的命名空间。如果唯一的变化是默认的命名空间声明('的xmlns =“HTTP:// www.ibm.com/mdm/schema“')被删除,那么根元素将不在任何名称空间中,并且”{http://www.ibm.com/mdm/schema} Envelope“不能成为预期的结果。 – mzjn

+0

@mzjn是的,你是对的。我改变了预期的结果... – mariz

+0

我建议一个简单的文本搜索和替换操作,类似于这一个:http://stackoverflow.com/a/40978913/407651。 – mzjn

回答

0

为了消除您的命名空间前缀“SCH”你必须注册类似如下─

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