Javascript 邮递员:如何在xml主机响应中解析CDATA中的xml?
我在这里和其他地方阅读了多个参考资料,但我未能解决我的问题 我用XML向主机发送一个POST请求,主机的CDATA由另一个XML“请求”组成,并且响应具有相同的结构。 从CDATA中的嵌套XML响应中,我需要提取一个属性('ATTRIBUTE7'),它将成为Postman中的一个环境变量。 我的理解是,由于CDATA,VASDataString的内容被视为不应解析的文本块 我怎样才能超过这个街区 请求:Javascript 邮递员:如何在xml主机响应中解析CDATA中的xml?,javascript,json,xml,cheerio,postman-testcase,Javascript,Json,Xml,Cheerio,Postman Testcase,我在这里和其他地方阅读了多个参考资料,但我未能解决我的问题 我用XML向主机发送一个POST请求,主机的CDATA由另一个XML“请求”组成,并且响应具有相同的结构。 从CDATA中的嵌套XML响应中,我需要提取一个属性('ATTRIBUTE7'),它将成为Postman中的一个环境变量。 我的理解是,由于CDATA,VASDataString的内容被视为不应解析的文本块 我怎样才能超过这个街区 请求: <?xml version="1.0" encoding=&quo
<?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>
控制台中的输出为:
{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>"
{VASMessage:{…}
1.▶消息:{…}
1.▶$: {…}
1.xmlns:“http://subdomain.domain.com"
2.▶标题:{…}
标题1:“SIA01010001001”
标题2:“192”
原始时间:“2020-05-13T17:21:00.000+02:00”
交易代码:“70”
请求处理:“假”
消息类型:“false”
MessageDirection:“正确”
AeviResponseCode:“0”
3.▶正文:{…}
VASProviderID:“ABC”
VASProductID:“PIPPO”
VASMessageType:“PIPPO\U响应”
交易时间:“2020-05-13T17:21:00.000+02:00”
零售ID:“0101”
布兰奇:“01”
ShopID:“0001”
POSID:“001”
VASDataString:“
"
提前感谢您。解决方案:
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);
})
});
{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>"
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);
})
});