You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决从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结构如下:
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>
解决方法

报错根源在于两处不匹配:

  1. XML中的Envelope和Body带有命名空间前缀s:,转换为JSON后键名会保留该前缀,你代码里直接用Envelope、Body会找不到对应属性
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:00:11