gpt4 book ai didi

python - 删除 lxml 中的所有命名空间?

转载 作者:数据小太阳 更新时间:2023-10-29 02:14:11 24 4
gpt4 key购买 nike

我正在使用 python 中的 lxml 库处理一些谷歌的数据 API。命名空间在这里是一个巨大的麻烦。对于我正在做的很多工作(主要是 xpath 的东西),直接忽略它们会很好。

有没有一种简单的方法可以忽略 python/lxml 中的 xml 命名空间?

谢谢!

最佳答案

如果您想从元素和属性中删除所有命名空间,我建议使用下面显示的代码。

上下文:在我的应用程序中,我正在获取 SOAP 响应流的 XML 表示,但我对在客户端构建对象不感兴趣;我只对 XML 表示本身感兴趣。此外,我对任何命名空间的事情都不感兴趣,这只会让事情变得比我需要的更复杂,就我的目的而言。因此,我只是从元素中删除 namespace ,并删除所有包含 namespace 的属性。

def dropns(root):
for elem in root.iter():
parts = elem.tag.split(':')
if len(parts) > 1:
elem.tag = parts[-1]
entries = []
for attrib in elem.attrib:
if attrib.find(':') > -1:
entries.append(attrib)
for entry in entries:
del elem.attrib[entry]

# Test case
name = '~/tmp/mantisbt/test.xml'
f = open(name, 'rb')
import lxml.etree as etree
parser = etree.XMLParser(ns_clean=True, recover=True)
root = etree.parse(f, parser=parser)
print('=====================================================================')
print etree.tostring(root, pretty_print = True)
print('=====================================================================')
dropns(root)
print etree.tostring(root, pretty_print = True)
print('=====================================================================')

打印:

=====================================================================
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:mc_issue_getResponse>
<return xsi:type="tns:IssueData">
<id xsi:type="xsd:integer">356</id>
<view_state xsi:type="tns:ObjectRef">
<id xsi:type="xsd:integer">10</id>
<name xsi:type="xsd:string">public</name>
</view_state>
</return>
</ns1:mc_issue_getResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
=====================================================================
<Envelope>
<Body>
<mc_issue_getResponse>
<return>
<id>356</id>
<view_state>
<id>10</id>
<name>public</name>
</view_state>
</return>
</mc_issue_getResponse>
</Body>
</Envelope>
=====================================================================

关于python - 删除 lxml 中的所有命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com