Javascript 使用SAPUI5和来自web服务的SOAP请求和响应

Javascript 使用SAPUI5和来自web服务的SOAP请求和响应,javascript,soap,xml-parsing,sapui5,Javascript,Soap,Xml Parsing,Sapui5,我的问题是,我正在从事一个用flash制作的重构项目,必须将其转换为SAUI5,为此我使用了soap web服务。它有多个web服务部分。Ajax调用如下所示: `var oAppSettings = sap.ui.getCore().getModel("appSettings").getData(); var response; var oData; var oXMLModel = new sap.ui.model.xml.XMLModel();

我的问题是,我正在从事一个用flash制作的重构项目,必须将其转换为SAUI5,为此我使用了soap web服务。它有多个web服务部分。Ajax调用如下所示:

`var oAppSettings = sap.ui.getCore().getModel("appSettings").getData();
        var response;
        var oData;
        var oXMLModel = new sap.ui.model.xml.XMLModel();

        var sReq = "<soapenv:Envelope 
        xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" 
        xmlns:web=\"http://webservice.cpb.dqw.sap.com\">\n" +
            "   <soapenv:Header/>\n" +
            "   <soapenv:Body>\n" +
            "      <web:boeLogonWithToken>\n" +
            "         <!--Optional:-->\n" +
            "         <web:args0>"+oAppSettings.loginToken+"</web:args0>\n" 
            +
            "      </web:boeLogonWithToken>\n" +
            "   </soapenv:Body>\n" +
            "</soapenv:Envelope>";

        $.ajax({
            url: oAppSettings.serverPath + ".AdminHttpSoap11Endpoint/",
            method: "POST",
            dataType: "xml",
            data: sReq,
            //processData:false,
            contentType: "text/xml; charset=\"utf-8\"",
            success: function (data, textStatus, jqXHR) {
                response = data;
                console.log(response);
                console.log("Is a success!");
            },
            error: function (xhr, status) {
                console.log("Error: : " + status);
            },
            complete: function (xhr, status) {
                console.log(response);
                setUpData();
            }
        });

        function setUpData(){
            oXMLModel.setData(response);

            console.log(oXMLModel.getXML());
        }`
`var-oAppSettings=sap.ui.getCore().getModel(“appSettings”).getData();
var反应;
小田变种;
var oXMLModel=new sap.ui.model.xml.XMLModel();
var sReq=“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“+oAppSettings.loginToken+”\n”
+
“\n”+
“\n”+
"";
$.ajax({
url:oAppSettings.serverPath+“.AdminHttpSoap11Endpoint/”,
方法:“张贴”,
数据类型:“xml”,
数据:sReq,
//processData:false,
contentType:“text/xml;字符集=\“utf-8\”,
成功:函数(数据、文本状态、jqXHR){
响应=数据;
控制台日志(响应);
log(“成功了!”);
},
错误:函数(xhr,状态){
日志(“错误::”+状态);
},
完成:功能(xhr,状态){
控制台日志(响应);
setUpData();
}
});
函数setUpData(){
oXMLModel.setData(响应);
log(oXMLModel.getXML());
}`
我得到的答复是:

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns:boeLogonWithTokenResponse 
         xmlns:ns="http://webservice.cpb.dqw.sap.com">
            <ns:return xmlns:ax22="http://shared.cpb.dqw.sap.com/xsd" 
             xmlns:ax21="http://types.cpb.dqw.sap.com/xsd" 
             xmlns:ax24="http://types.sdk.boe.dqw.sap.com/xsd" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:type="ax21:CPBAdminResult">
                <ax21:contentUpgradeVersion>0</ax21:contentUpgradeVersion>
                <ax21:cpInfo xsi:nil="true" />
                <ax21:errorData xsi:nil="true" />
                <ax21:intValue xsi:nil="true" />
                <ax21:projectInfo xsi:nil="true" />
                <ax21:reservedData xsi:nil="true" />
                <ax21:status>OK</ax21:status>
                <ax21:stringArray xsi:nil="true" />
                <ax21:stringValue xsi:nil="true" />
            </ns:return>
        </ns:boeLogonWithTokenResponse>
    </soapenv:Body>
</soapenv:Envelope>`

0
好啊
`
我想知道如何解析SAPUI5的xml模型返回的xml

谢谢

您可以使用:(jQuery将使用SAPUI5加载)

var xmlContent=
`
0
好啊
`;
var res=jQuery.parseXML(xmlContent)
var values=res.getElementsByTagName(“ns:return”)[0];
var result={};
对于(var i=0;i
请注意,这是有点粗糙的方式

您可以将其转换为通用的

我的建议是从服务器上获取JSON本身,而不是在UI上这样做


干杯

您的问题似乎想知道如何使用XMLModel(您应该坚持这个答案;),因为它比第一次出现时更简单,并且意味着您不必转换为JSON

使用中提供的XML创建XMLModel的实例:

var oModel = new XMLModel();
oModel.loadData("response.xml");
导航到要访问的元素:

var path = "/soapenv:Body/ns:boeLogonWithTokenResponse/ns:return";
oModel.attachRequestCompleted(function(){
        var status = oModel.getProperty(path + "/ax21:status"); 
});

你是在问如何解析结果吗?难道任何XML解析器都不能提供这一点吗?我已经尝试了所有的方法,当我尝试最简单的解析器示例时,它返回未定义的结果。不久前尝试过这个:var解析器、text、xmlDoc;parser=新的DOMParser();xmlDoc=parser.parseFromString(响应,“text/xml”);console.log(xmlDoc.getElementsByTagName(“ns\\:return”)[0].childNodes[6].nodeValue);您应该在问题文本中显示您尝试了什么,以及任何错误消息。请看。谢谢你,我会尝试一下,因为如果可能的话,我会在不更改web服务的情况下尝试一下。顺便说一句,如果其中一个标记有多个值,那么我会添加一个额外的循环,以在该点获得每个值。
var path = "/soapenv:Body/ns:boeLogonWithTokenResponse/ns:return";
oModel.attachRequestCompleted(function(){
        var status = oModel.getProperty(path + "/ax21:status"); 
});