条属性/ SOAP从XML
问题描述:
命名空间。如果我有几个标签是这样的: <ServiceId xsi:type="xsd:string">aval</ServiceId>
条属性/ SOAP从XML
是xsi:type="xsd:string"
技术上的属性?
当我试试这个:
from StringIO import StringIO
from SOAPpy.wstools.Utility import DOM
badxml = '''<?xml version="1.0" encoding="utf-8"?>
<ServiceId xsi:type="xsd:string">aval</ServiceId>'''
document = DOM.loadDocument(StringIO(badxml))
orig_len = len(document.childNodes[0].toxml())
for node in document.childNodes:
node.removeAttribute('xsi:type')
new_len = len(node.toxml())
diff = orig_len - new_len
print diff
...我得到一个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/SOAPpy/wstools/Utility.py", line 572, in loadDocument
return xml.dom.minidom.parse(data)
File "/usr/lib64/python2.6/site-packages/_xmlplus/dom/minidom.py", line 1915, in parse
return expatbuilder.parse(file)
File "/usr/lib64/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 930, in parse
result = builder.parseFile(file)
File "/usr/lib64/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 207, in parseFile
parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: unbound prefix: line 2, column 9
我基本上要删除大型XML文档的所有属性。
答
XSI是一个命名空间。如果需要它们,可以在查询中使用它们,删除它们可能会对数据结果产生不利影响,或者如果有其他xml元素具有相同的元素名称(但具有不同的名称空间)。
否则你在做什么是一个黑客位的,你还不如读文件作为一个字符串,并做了大规模的正则表达式替换你想要的名称空间字符串删除(不推荐)。