在 Python 脚本中,我调用 SOAP 服务,该服务返回 XML 回复,其中元素具有命名空间前缀,比方说
<ns0:foo xmlns:ns0="SOME-URI">
<ns0:bar>abc</ns0:bar>
</ns0:foo>
我可以通过方法调用提取ns0:bar的内容
doc.getElementsByTagName('ns0:bar')
但是,可以说,名称 ns0 只是一个局部变量(模式中未提及),也可能被命名为 flubber 或 you_should_not_care。在不依赖特定名称的情况下提取命名空间元素的内容的正确方法是什么?就我而言,SOAP 服务中的前缀确实发生了更改,导致解析失败。
如果按元素名称搜索,则需要命名空间支持
doc.getElementsByTagNameNS('SOME-URI','bar')
如果使用具有命名空间支持的包,例如
lxml
tree.xpath('//{SOME-URI}bar)'
或按当地名称
tree.xpath('//*[local-name()="bar"]'