Post 来自 Fedex 的响应删除了 Netsuite 中的 XML 标签
Post response from Fedex stripped XML tags in Netsuite
我正在使用 UserEventScript 请求带有跟踪号的联邦快递以询问跟踪详情。
var headerObj = [];
headerObj['Content-Type'] = 'text/xml';
headerObj['Accept'] = 'text/xml';
var body =
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"
xmlns:v19=\"http://fedex.com/ws/track/v19\">\n" +
" <soapenv:Header />\n" +
" <soapenv:Body>\n" +
" <v19:TrackRequest>\n" +
" <v19:WebAuthenticationDetail>\n" +
" <v19:ParentCredential>\n" +
" <v19:Key>Your key</v19:Key>\n" +
" <v19:Password>Your password</v19:Password>\n" +
" </v19:ParentCredential>\n" +
" <v19:UserCredential>\n" +
" <v19:Key>Your key</v19:Key>\n" +
" <v19:Password>Your password</v19:Password>\n" +
" </v19:UserCredential>\n" +
" </v19:WebAuthenticationDetail>\n" +
" <v19:ClientDetail>\n" +
" <v19:AccountNumber>Your ac no.</v19:AccountNumber>\n" +
" <v19:MeterNumber>Your meter no.</v19:MeterNumber>\n" +
" </v19:ClientDetail>\n" +
" <v19:TransactionDetail>\n" +
" <v19:CustomerTransactionId>Track By
Number_v19</v19:CustomerTransactionId>\n" +
" <v19:Localization>\n" +
" <v19:LanguageCode>EN</v19:LanguageCode>\n" +
" <v19:LocaleCode>US</v19:LocaleCode>\n" +
" </v19:Localization>\n" +
" </v19:TransactionDetail>\n" +
" <v19:Version>\n" +
" <v19:ServiceId>trck</v19:ServiceId>\n" +
" <v19:Major>19</v19:Major>\n" +
" <v19:Intermediate>0</v19:Intermediate>\n" +
" <v19:Minor>0</v19:Minor>\n" +
" </v19:Version>\n" +
" <v19:SelectionDetails>\n" +
" <v19:CarrierCode>FDXE</v19:CarrierCode>\n" +
" <v19:PackageIdentifier>\n" +
" <v19:Type>TRACKING_NUMBER_OR_DOORTAG</v19:Type>\n" +
" <v19:Value>992959690382</v19:Value>\n" +
" </v19:PackageIdentifier>\n" +
" <v19:ShipmentAccountNumber />\n" +
" <v19:SecureSpodAccount />\n" +
" </v19:SelectionDetails>\n" +
" <v19:ProcessingOptions>INCLUDE_DETAILED_SCANS</v19:ProcessingOptions>\n" +
" </v19:TrackRequest>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>"
var resoponse = https.post({
url: 'https://ws.fedex.com:443/web-services',
body: body,
headers:headerObj
});
而我得到的response.body是这样的
SUCCESSSUCCESStrck0Request 成功 processed.Request 成功 processed.Track 由 Number_v19ENUStrck1900SUCCESSSUCCESStrck0Request 成功 processed.Request 成功处理。falsefalse0SUCCESStrck0Request 成功 processed.Request 成功处理。9929596903822459294000 ~992959690382~FX2021-03-21T00:00:00AR已到达 FedEx 地点MEMPHISTNUS美国falsetime.EDDUNAVAILABLEFDXEFedExExpressSHIPPER_REFERENCEB2003217、STAR DIAM LTDINTERNATIONAL_PRIORITYInternational PriorityIPLB1.013123INLB1.0FEDEX_BOXFedExBox1100AWBDELIVER_WEEKDAYDeliver WeekdayOTHERDUTIES_AND_TAXESRECIPIENT_ACCOUNTRecipientTRANSPORTATIONSHIPPER_ACCOUNTShipperHUNGHOM,HK香港特别行政区, ChinafalseACTUAL_PICKUP2021-03-20T14:39:00+08:00SHIP2021-03-20T00:00:00ACTUAL_TENDER2021-03-20T14:39:00+08:00ATLANTA,GAUSUnited Statesfalse00ON_DELIVERYON_EXCEPTIONON_ESTIMATED_DELIVERYINDIRECT_SIGNATURE_RELEASEINELIGIBLEREDIRECT_TO_HOLD_AT_LOCATIONPOSSIBLY_ELIGIBLEREROUTEINELIGIBLERESCHEDULEINELIGIBLE2021-03-21T08:19:00-05:00AR到达FedEx地点
MEMPHISTN38118US美国假
FEDEX_FACILITY2021-03-20T23:17:00-08:00DPFedEx 出发地点
ANCHORAGEAK99502US美国假
FEDEX_FACILITY2021-03-20T21:58:00-08:00AR到达FedEx地点
ANCHORAGEAK99502US美国假
FEDEX_FACILITY2021-03-21T04:35:00+08:00IT在途中
CHEK LAP KOK300HK中国香港特别行政区false
FEDEX_FACILITY2021-03-20T18:09:00+08:00DPLeft FedEx 始发设施
TSUEN WAN230HK中国香港特别行政区false
ORIGIN_FEDEX_FACILITY2021-03-20T14:39:00+08:00PU已取
TSUEN WAN230HK中国香港特别行政区false
PICKUP_LOCATION
实际上,它与我从邮递员那里得到的正常结果相符,但无法读取。
我应该怎么做才能将上面的格式转换为正常的 json 格式或 xml 格式?或者我怎样才能从上面的响应中得到准确的值?
你没有展示你是如何得到的 body 但我怀疑你只是在记录它。
FedEx API returns 是什么 xml。如果您记录 Netsuite 不会为您转义标签,那么它在日志中看起来就像那样。如果您查看日志并检查详细信息,您应该会看到所有标签。
让 NS 为你转义:
log.debug({
title:'FedEx Response',
details:xml.escape({xmlText:resp.body})
});
然后您可以使用如下代码提取您要查找的信息:
var xmlDocument = xml.Parser.fromString({
text: resp.body
});
var ref = xml.XPath.select({
node: xmlDocument,
xpath: '//ns:TrackingNumber' /* or maybe //nlapi:TrackingNumber or //TrackingNumber */
});
通过转义响应获得完整 xml 后,您可以看到响应中使用的名称空间。我认为第一种形式是您将使用的形式,但如果 ns 的前缀 xmlns 前缀也是默认名称空间,则您可能需要 nlapi: 形式。
我正在使用 UserEventScript 请求带有跟踪号的联邦快递以询问跟踪详情。
var headerObj = [];
headerObj['Content-Type'] = 'text/xml';
headerObj['Accept'] = 'text/xml';
var body =
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"
xmlns:v19=\"http://fedex.com/ws/track/v19\">\n" +
" <soapenv:Header />\n" +
" <soapenv:Body>\n" +
" <v19:TrackRequest>\n" +
" <v19:WebAuthenticationDetail>\n" +
" <v19:ParentCredential>\n" +
" <v19:Key>Your key</v19:Key>\n" +
" <v19:Password>Your password</v19:Password>\n" +
" </v19:ParentCredential>\n" +
" <v19:UserCredential>\n" +
" <v19:Key>Your key</v19:Key>\n" +
" <v19:Password>Your password</v19:Password>\n" +
" </v19:UserCredential>\n" +
" </v19:WebAuthenticationDetail>\n" +
" <v19:ClientDetail>\n" +
" <v19:AccountNumber>Your ac no.</v19:AccountNumber>\n" +
" <v19:MeterNumber>Your meter no.</v19:MeterNumber>\n" +
" </v19:ClientDetail>\n" +
" <v19:TransactionDetail>\n" +
" <v19:CustomerTransactionId>Track By
Number_v19</v19:CustomerTransactionId>\n" +
" <v19:Localization>\n" +
" <v19:LanguageCode>EN</v19:LanguageCode>\n" +
" <v19:LocaleCode>US</v19:LocaleCode>\n" +
" </v19:Localization>\n" +
" </v19:TransactionDetail>\n" +
" <v19:Version>\n" +
" <v19:ServiceId>trck</v19:ServiceId>\n" +
" <v19:Major>19</v19:Major>\n" +
" <v19:Intermediate>0</v19:Intermediate>\n" +
" <v19:Minor>0</v19:Minor>\n" +
" </v19:Version>\n" +
" <v19:SelectionDetails>\n" +
" <v19:CarrierCode>FDXE</v19:CarrierCode>\n" +
" <v19:PackageIdentifier>\n" +
" <v19:Type>TRACKING_NUMBER_OR_DOORTAG</v19:Type>\n" +
" <v19:Value>992959690382</v19:Value>\n" +
" </v19:PackageIdentifier>\n" +
" <v19:ShipmentAccountNumber />\n" +
" <v19:SecureSpodAccount />\n" +
" </v19:SelectionDetails>\n" +
" <v19:ProcessingOptions>INCLUDE_DETAILED_SCANS</v19:ProcessingOptions>\n" +
" </v19:TrackRequest>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>"
var resoponse = https.post({
url: 'https://ws.fedex.com:443/web-services',
body: body,
headers:headerObj
});
而我得到的response.body是这样的
SUCCESSSUCCESStrck0Request 成功 processed.Request 成功 processed.Track 由 Number_v19ENUStrck1900SUCCESSSUCCESStrck0Request 成功 processed.Request 成功处理。falsefalse0SUCCESStrck0Request 成功 processed.Request 成功处理。9929596903822459294000 ~992959690382~FX2021-03-21T00:00:00AR已到达 FedEx 地点MEMPHISTNUS美国falsetime.EDDUNAVAILABLEFDXEFedExExpressSHIPPER_REFERENCEB2003217、STAR DIAM LTDINTERNATIONAL_PRIORITYInternational PriorityIPLB1.013123INLB1.0FEDEX_BOXFedExBox1100AWBDELIVER_WEEKDAYDeliver WeekdayOTHERDUTIES_AND_TAXESRECIPIENT_ACCOUNTRecipientTRANSPORTATIONSHIPPER_ACCOUNTShipperHUNGHOM,HK香港特别行政区, ChinafalseACTUAL_PICKUP2021-03-20T14:39:00+08:00SHIP2021-03-20T00:00:00ACTUAL_TENDER2021-03-20T14:39:00+08:00ATLANTA,GAUSUnited Statesfalse00ON_DELIVERYON_EXCEPTIONON_ESTIMATED_DELIVERYINDIRECT_SIGNATURE_RELEASEINELIGIBLEREDIRECT_TO_HOLD_AT_LOCATIONPOSSIBLY_ELIGIBLEREROUTEINELIGIBLERESCHEDULEINELIGIBLE2021-03-21T08:19:00-05:00AR到达FedEx地点 MEMPHISTN38118US美国假 FEDEX_FACILITY2021-03-20T23:17:00-08:00DPFedEx 出发地点 ANCHORAGEAK99502US美国假 FEDEX_FACILITY2021-03-20T21:58:00-08:00AR到达FedEx地点 ANCHORAGEAK99502US美国假 FEDEX_FACILITY2021-03-21T04:35:00+08:00IT在途中 CHEK LAP KOK300HK中国香港特别行政区false FEDEX_FACILITY2021-03-20T18:09:00+08:00DPLeft FedEx 始发设施 TSUEN WAN230HK中国香港特别行政区false ORIGIN_FEDEX_FACILITY2021-03-20T14:39:00+08:00PU已取 TSUEN WAN230HK中国香港特别行政区false PICKUP_LOCATION
实际上,它与我从邮递员那里得到的正常结果相符,但无法读取。 我应该怎么做才能将上面的格式转换为正常的 json 格式或 xml 格式?或者我怎样才能从上面的响应中得到准确的值?
你没有展示你是如何得到的 body 但我怀疑你只是在记录它。 FedEx API returns 是什么 xml。如果您记录 Netsuite 不会为您转义标签,那么它在日志中看起来就像那样。如果您查看日志并检查详细信息,您应该会看到所有标签。
让 NS 为你转义:
log.debug({
title:'FedEx Response',
details:xml.escape({xmlText:resp.body})
});
然后您可以使用如下代码提取您要查找的信息:
var xmlDocument = xml.Parser.fromString({
text: resp.body
});
var ref = xml.XPath.select({
node: xmlDocument,
xpath: '//ns:TrackingNumber' /* or maybe //nlapi:TrackingNumber or //TrackingNumber */
});
通过转义响应获得完整 xml 后,您可以看到响应中使用的名称空间。我认为第一种形式是您将使用的形式,但如果 ns 的前缀 xmlns 前缀也是默认名称空间,则您可能需要 nlapi: 形式。