我正在解析suds客户端从Web Services SOAP API返回的对象
我有一个attributeObjects列表,比如
(defectStateAttributeValueDataObj){
attributeDefinitionId =
(attributeDefinitionIdDataObj){
name = "Comment"
}
attributeValueId =
(attributeValueIdDataObj){
name = "Owner changed because of default owner assignment specified in the component map"
}
}
和
(defectStateAttributeValueDataObj){
attributeDefinitionId =
(attributeDefinitionIdDataObj){
name = "OwnerName"
}
attributeValueId =
(attributeValueIdDataObj){
name = "Schmoe, Joe"
}
}
我使用以下循环来提取键/值对:
for defect in myDefectsPage.mergedDefects :
print defect.cid,
for attribute in defect.defectStateAttributeValues:
print attribute
attr= attribute.attributeDefinitionId.name
val=attribute.attributeValueId.name
print attr,'=',val,
print ""
(上述对象是print属性命令的结果)
这将按照EVERY的预期工作,除了attribute.attributeDefinitionId.name ==" Comment"
对于那个我得到了
追踪(最近一次通话): 文件,第63行,in VAL = attribute.attributeValueId.name AttributeError:' Text'对象没有属性' name'
这很奇怪,因为如果我使用的话 val = attribute.attributeValueId#.name 它会打印
Commment =(attributeValueIdDataObj){ name ="由于组件映射中指定的默认所有者分配,所有者已更改" }
所以看起来它是一个attributeValueIdDataObj并且DOES有一个名字属性。
我使用了suds DEBUG日志记录,无论attribute.attributeDefinitionId.name是什么,XML返回元素看起来都完全相同。
我不知道它是如何变成一个' Text'尝试访问name属性时的对象
有什么想法吗?
答案 0 :(得分:0)
进一步检查(并在发生异常时打印出返回对象的类型)这是Web服务SOAP服务器中的一个错误。
当评论为空时,它返回
<attributeValueId/>
标签,
而不是正确的
<attributeValueId>
<name/>
</attributeValueId>
对象。所以它导致sax.Text对象而不是suds.attributeValueIdDataObj对象
所以没有python或suds的谜团可以解决。
对不起误报......