我正在尝试使用suds库在 Python 2.6 中实现 SOAP Web 服务。效果很好,但是在尝试使用lxml解析输出时遇到了问题。
Suds 返回一个suds.sax.text.Text
带有来自 SOAP 服务的回复的对象。该类suds.sax.text.Text
是 Python 内置Unicode 类的子类。本质上,它可以与以下 Python 语句相媲美:
u'<?xml version="1.0" encoding="utf-8" ?><root><lotsofelements \></root>'
这是不协调的,因为如果 XML 声明是正确的,则内容是 UTF-8 编码的,因此不是Python Unicode 对象(因为它们存储在一些内部编码中,如 UCS4)。
如文档所述, lxml 将拒绝解析它,因为对于它应该被解释为什么编码没有明确的答案。
在我看来,有两种方法可以摆脱这种绑定:
- 剥离
<?xml>
声明,包括编码。 - 使用指定的编码将 Suds 的输出转换为字节串。
目前,我从 web 服务接收的数据在 ASCII 范围内,所以任何一种方式都可以,但对我来说,这两种方式都非常像丑陋的黑客,我不太确定如果我开始会发生什么接收需要更广泛的 Unicode 字符的数据。
有什么好主意吗?我无法想象我是这个职位的第一个……</p>