如何解决从XML响应提取sessionId设置Postman变量的报错?
问题描述
我尝试从XML响应中设置Postman环境变量sessionId,使用了以下代码:
var responseJson = xml2Json(responseBody); console.log(responseJson); postman.setEnvironmentVariable("sessionID", responseJson.Envelope.Body.CreateSessionResponse.CreateSessionResult.Output.sessionID);
但运行后返回错误:
TypeError: Cannot read properties of undefined (reading 'Body').
转换后的JSON结构如下:
原始响应XML:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <CreateSessionResponse xmlns="http://vz.com/Anywhere/Service/v9"> <CreateSessionResult> <output> <sessionId>azrsit-2fb658dc-7048-4188-8427</sessionId> </output> </CreateSessionResult> </CreateSessionResponse> </s:Body> </s:Envelope>
解决方法
报错根源在于两处不匹配:
- XML中的
Envelope和Body带有命名空间前缀s:,转换为JSON后键名会保留该前缀,你代码里直接用Envelope、Body会找不到对应属性 - XML里的节点是小写的
output和sessionId,但你代码里写了大写的Output和sessionID,大小写不匹配导致读取失败
修改后的代码如下:
var responseJson = xml2Json(responseBody); console.log(responseJson); postman.setEnvironmentVariable("sessionID", responseJson['s:Envelope']['s:Body'].CreateSessionResponse.CreateSessionResult.output.sessionId);
另外,Postman目前推荐使用pm.environment.set()替代旧版的postman.setEnvironmentVariable(),更规范的写法为:
var responseJson = xml2Json(responseBody); pm.environment.set("sessionID", responseJson['s:Envelope']['s:Body'].CreateSessionResponse.CreateSessionResult.output.sessionId);
内容的提问来源于stack exchange,提问作者Coca Coffee
相关产品推荐
相关产品推荐

