在Netsuite脚本中,我试图解析EchoSign Webservice的响应。 EchoSign的回应是这样的
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<getFormDataResponse xmlns="http://api.echosign">
<getFormDataResult xmlns="http://api.echosign">
<errorCode xmlns="http://dto8.api.echosign">OK</errorCode>
<errorMessage xmlns="http://dto8.api.echosign" xsi:nil="true" />
<formDataCsv xmlns="http://dto8.api.echosign">SOME DATA </formDataCsv>
<success xmlns="http://dto8.api.echosign">true</success>
</getFormDataResult>
</getFormDataResponse>
</soap:Body>
</soap:Envelope>
我的NetSuite代码在这里
var response = nlapiRequestURL(echoSignUrl, postStr, header);
var xml = nlapiStringToXML(response.getBody());
var resData = nlapiSelectNode(xml, 'soap:Envelope/soap:Body'); // /getFormDataResult/success');
if (resData)
return nlapiSelectValue(resData, 'formDataCsv');
但不知怎的,我总是从nlapiSelectValue方法中得到任何回报!!
答案 0 :(得分:2)
应使用默认前缀 nlapi:
访问没有任何前缀的节点例如/ soap:Envelope / soap:Body / nlapi:getFormDataResponse
答案 1 :(得分:1)
处理命名空间的方式似乎存在问题。使用Notepad ++的XML Tools插件和您提供的XML,XPATH当前节点选择器甚至无法正确找到getFormDataResponse
节点。它只是失败了“未知例外”。
我还尝试手动评估以下表达式:
/soap:Envelope/soap:Body
(作品)/soap:Envelope/soap:Body/getFormDataResponse
(失败)/soap:Envelope/soap:Body//getFormDataResponse
(失败)/soap:Envelope/soap:Body/*[local-name() = 'getFormDataResponse']
(失败)/soap:Envelope/soap:Body/descendants::*[local-name() = 'getFormDataResponse']
(失败)/soap:Envelope/soap:Body/descendants::getFormDataResponse
(失败)如果我修改XML,那么EchoSign名称空间在带有前缀的Envelope中,如下所示:
<soap:Envelope xmlns:echo="http://api.echosign" xmlns:dto8="http://dto8.api.echosign" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<echo:getFormDataResponse>
<echo:getFormDataResult>
<dto8:errorCode>OK</dto8:errorCode>
<dto8:errorMessage xsi:nil="true" />
<dto8:formDataCsv>SOME DATA</dto8:formDataCsv>
<dto8:success>true</dto8:success>
</echo:getFormDataResult>
</echo:getFormDataResponse>
</soap:Body>
</soap:Envelope>
然后路径选择器可以正确地一直向下到formDataCsv
节点。它返回路径:/soap:Envelope/soap:Body/echo:getFormDataResponse/echo:getFormDataResult/dto8:formDataCsv
。
不确定是多么有用,因为你无法控制EchoSign发送给你的XML,但我不确定如何正确格式化XPATH以处理命名空间。