我已经在这里和其他地方阅读了多个资源,但未能解决我的问题。
我以XML发送POST请求到具有由另一个XML“请求”组成的CDATA的主机,并且响应具有相同的结构。 我需要从CDATA内的嵌套XML响应中提取一个属性(“ ATTRIBUTE7”),该属性将成为Postman中的环境变量。 我的理解是,由于CDATA的存在,VASDataString的内容被视为一块文本,不应对其进行解析。
我如何超越这个障碍?
请求
<?xml version="1.0" encoding="UTF-8"?>
<va:VASMessage xmlns:va="http://subdomain.domain.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://subdomain.domain.com" file:/C:/work/work-idea/somewhere/vas.xsd" Version="1.1.2">
<va:Header>
<va:HeadElem1>ABC123</va:HeadElem1>
<va:HeadElem2>192</va:HeadElem2>
<va:OriginalTime>2020-05-13T17:21:00</va:OriginalTime>
<va:TransactionCode>70</va:TransactionCode>
<va:ReqProcessing>0</va:ReqProcessing>
<va:MessageType>0</va:MessageType>
<va:MessageDirection>0</va:MessageDirection>
</va:Header>
<va:Body>
<va:VASProviderID>ABC</va:VASProviderID>
<va:VASProductID>PIPPO</va:VASProductID>
<va:VASMessageType>PIPPO_REQUEST</va:VASMessageType>
<va:TransactionTime>2020-05-13T17:21:00</va:TransactionTime>
<va:RetailerID>0101</va:RetailerID>
<va:BranchID>01</va:BranchID>
<va:ShopID>0001</va:ShopID>
<va:POSID>001</va:POSID>
<va:VASDataString><![CDATA[
<HostMessage>
<PIPPO_REQUEST>
<HostRequest>
<Header Attr1="AB12" Timestamp="{{TimeStamp}}000" />
<GORDO Operation="000192" />
<Check>
<Request Attr2="000100031408" Attr3="8029513427007" Attr4="2500">
<ElemX Attr5="29" />
</Request>
</Check>
</HostRequest>
</PIPPO_REQUEST>
</HostMessage>]]>
</va:VASDataString>
</va:Body>
</va:VASMessage>
响应:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><VASMessage xmlns="http://subdomain.domain.com">
<Header>
<HeadElem1>ABC123</HeadElem1>
<HeadElem2>192</HeadElem2>
<OriginalTime>2020-05-13T17:21:00.000+02:00</OriginalTime>
<TransactionCode>70</TransactionCode>
<ReqProcessing>false</ReqProcessing>
<MessageType>false</MessageType>
<MessageDirection>true</MessageDirection>
<ResponseCode>0</ResponseCode>
</Header>
<Body>
<VASProviderID>ABC</VASProviderID>
<VASProductID>PIPPO</VASProductID>
<VASMessageType>PIPPO_RESPONSE</VASMessageType>
<TransactionTime>2020-05-13T17:21:00.000+02:00</TransactionTime>
<RetailerID>0101</RetailerID>
<BranchID>01</BranchID>
<ShopID>0001</ShopID>
<POSID>001</POSID>
<VASDataString><HostMessage>
<PIPPO_RESPONSE>
<HostResponse Attr6="0000" ATTRIBUTE7="00039208052" Versione="2.0">
<Header Attr8="XYZ" Attr9="0101010001001000192" Attr1="CD23" Timestamp="20200513184508520"/>
<Result Attr10="25838" ExDate="20220331" Attr11="000100031408"/>
</HostResponse>
</PIPPO_RESPONSE>
</HostMessage></VASDataString>
</Body>
</VASMessage>
测试(邮递员)中有:
var responseJson = xml2Json(responseBody);
console.log(responseJson);
,控制台中的输出为:
{VASMessage: {…}}
1. ▶VASMessage: {…}
1. ▶$: {…}
1. xmlns: "http://subdomain.domain.com"
2. ▶Header: {…}
HeadElem1: "SIA0101010001001"
HeadElem2: "192"
OriginalTime: "2020-05-13T17:21:00.000+02:00"
TransactionCode: "70"
ReqProcessing: "false"
MessageType: "false"
MessageDirection: "true"
AeviResponseCode: "0"
3. ▶Body: {…}
VASProviderID: "ABC"
VASProductID: "PIPPO"
VASMessageType: "PIPPO_RESPONSE"
TransactionTime: "2020-05-13T17:21:00.000+02:00"
RetailerID: "0101"
BranchID: "01"
ShopID: "0001"
POSID: "001"
VASDataString: "<HostMessage>
<PIPPO_RESPONSE>
<HostResponse Attr6="0000" ATTRIBUTE7="00020226551" Versione="2.0">
<Header Attr8="XYZ" Attr9="0101010001001000192000265" Attr1="CD23" Timestamp="20200921121950064"/>
<Result Attr10="25838" ExDate="20220930" Attr11="000100031408"/>
</HostResponse>
</PIPPO_RESPONSE>
</HostMessage>"
谢谢。
答案 0 :(得分:0)
解决方案:
const xml2js = require('xml2js');
xml2js.parseString(pm.response.text(), (err, result) => {
if (err) {
console.error(err);
return;
}
const body = result.VASMessage.Body[0].VASDataString[0];
xml2js.parseString(body, (err, result) => {
if (err) {
console.error(err);
return;
}
pm.environment.set("ATTRIBUTE7", JSON.stringify(result.HostMessage.PIPPO_RESPONSE[0].HostResponse[0].$.ATTRIBUTE7));
console.log(rresult.HostMessage.PIPPO_RESPONSE[0].HostResponse[0].$.ATTRIBUTE7);
})
});