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
有关如何获得此预期输出的任何想法?
的命名空间。如果唯一的变化是默认的命名空间声明('的xmlns =“HTTP:// www.ibm.com/mdm/schema“')被删除,那么根元素将不在任何名称空间中,并且”{http://www.ibm.com/mdm/schema} Envelope“不能成为预期的结果。 – mzjn
@mzjn是的,你是对的。我改变了预期的结果... – mariz
我建议一个简单的文本搜索和替换操作,类似于这一个:http://stackoverflow.com/a/40978913/407651。 – mzjn