我想从XML中获取一些数据并将其返回到同一个变量中,所以在返回之前我会这样做:
for element in response:
document = parseString(element)
try:
element = {
'scopes': document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
}
except:
element = False
return response
但是响应仍然包含原始xml数据而不是解析结果...基本上我希望element = ...
值返回response
值。
答案 0 :(得分:0)
编辑:根据delnan和jonrsharpe提高答案。
您的代码存在的问题是,当您循环
时for element in response
在每次迭代element
中都会指向一个新创建的对象,并使用以下行:
element = {
'scopes': document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
}
和之前指向的对象仍然相同。你可以试试这个。
for index,element in enumerate(response):
document = parseString(element)
try:
response[index]= {
'scopes': document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
}
except:
response[index]= False
return response
答案 1 :(得分:0)
假设响应是一个字符串列表,并且你想用解析后的元素dict替换这些字符串......,这很容易。由于列表是可变容器,因此您可以随时替换元素。无需返回列表......您传入的列表已更改。
def convert_response_to_elements(response):
for index, element_str in enumerate(response):
document = parseString(element_str)
try:
element = {
'scopes': document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
}
except:
element = False
response[index] = element
答案 2 :(得分:0)
由于响应是一个列表,我会使用pythons list comprehension。这将创建新列表而不修改旧列表。
new_response = [modify_element(element) for element in response]
稍后,如果您要删除等于False
的元素,可以使用filter函数:
without_false = filter(lambda element: bool(element), new_response)