0

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 メソッドからは常に何も返されません!!

4

2 に答える 2

1

名前空間の処理方法に問題があるようです。getFormDataResponseNotepad++ 用の XML ツール プラグインと提供された XML を使用すると、XPATH 現在のノード セレクターはノードを正しく見つけることさえできません。「不明な例外」で失敗するだけです。

また、次の式を手動で評価しようとしました。

  • /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 名前空間がプレフィックス付きのエンベロープにあるようにすると、次のようになります。

<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 を正しくフォーマットする方法がわかりません。

于 2013-07-01T18:08:46.297 に答える