一个老问题,但值得一提的是这项任务的另一个选择。
我喜欢使用xmltodict(Github)这是一个将XML转换为python字典的轻量级转换器。
将soap响应放入名为stack的变量中
用xmltodict.parse解析它In [48]: stack_d = xmltodict.parse(stack)
检查结果:In [49]: stack_d
Out[49]:
OrderedDict([('soap:Envelope',
OrderedDict([('@xmlns:soap',
'http://schemas.xmlsoap.org/soap/envelope/'),
('@xmlns:xsd', 'http://www.w3.org/2001/XMLSchema'),
('@xmlns:xsi',
'http://www.w3.org/2001/XMLSchema-instance'),
('soap:Body',
OrderedDict([('GetStartEndPointResponse',
OrderedDict([('@xmlns',
'http://www.etis.fskab.se/v1.0/ETISws'),
('GetStartEndPointResult',
OrderedDict([('Code',
'0'),
('Message',
None),
('StartPoints',
OrderedDict([('Point',
[OrderedDict([('Id',
'545'),
('Name',
'Get Me'),
('Type',
'sometype'),
('X',
'333'),
('Y',
'222')]),
OrderedDict([('Id',
'634'),
('Name',
'Get me too'),
('Type',
'sometype'),
('X',
'555'),
('Y',
'777')])])]))]))]))]))]))])
在这一点上,浏览python词汇表变得非常容易In [50]: stack_d['soap:Envelope']['soap:Body']['GetStartEndPointResponse']['GetStartEndPointResult']['StartPoints']['Point']
Out[50]:
[OrderedDict([('Id', '545'),
('Name', 'Get Me'),
('Type', 'sometype'),
('X', '333'),
('Y', '222')]),
OrderedDict([('Id', '634'),
('Name', 'Get me too'),
('Type', 'sometype'),
('X', '555'),
('Y', '777')])]