Einfachstes SOAP-Beispiel

241

Was ist das einfachste SOAP-Beispiel mit Javascript?

Um so nützlich wie möglich zu sein, sollte die Antwort:

  • Seien Sie funktional (mit anderen Worten, tatsächlich funktionieren)
  • Senden Sie mindestens einen Parameter, der an anderer Stelle im Code festgelegt werden kann
  • Verarbeiten Sie mindestens einen Ergebniswert, der an anderer Stelle im Code gelesen werden kann
  • Arbeiten Sie mit den meisten modernen Browserversionen
  • Seien Sie so klar und kurz wie möglich, ohne eine externe Bibliothek zu verwenden
Thomas Bratt
quelle
5
Einfach und klar zu sein kann zu Konflikten führen, wenn keine externe Bibliothek verwendet wird. Möchten Sie wirklich Ihren eigenen WSDL -> JS-Klassenkonverter schreiben?
Mikemaccana
19
Ich habe eine Frage: Wenn ich diese Frage als die erste Person sehen würde, würde ich erwarten, dass sie mit Kommentaren wie "Code anzeigen, dies ist kein" Rent a Coder "" herabgestuft wird. Nichts persönliches, Thomas :) Aber ich kann nicht verstehen, wie die Community entscheidet, was gut und was schlecht ist.
白 目
4
Hey, keine Sorge. Ich denke, der Punkt der Frage ist, dass es viele Möglichkeiten gibt, einen SOAP-Client mit JavaScript zu schreiben. Viele von ihnen sind hässlich, deshalb hoffte ich auf einige Ideen, wie ich es sauber halten kann.
Thomas Bratt
@dan ist es, weil 1. diese Frage ziemlich alt ist, es wurden immer noch viele grundlegende Fragen gestellt, die traditionell viele positive Stimmen haben, 2. es beschreibt ein ziemlich einfaches Problem, so dass es wahrscheinlich dazu neigt, neue Benutzer anzuziehen, die abstimmen könnten das Prinzip "Hey, das will ich auch wissen!" anstelle von "hey, diese Frage zeigt den Forschungsaufwand. Sie ist nützlich und klar!". Da der Frage dies meiner Meinung nach fehlt, habe ich sie abgelehnt. Nichts persönliches auch: D
phil294
@ThomasBratt Ich werde dies wahrscheinlich auf Meta fortsetzen, aber diese Art von Fragen verdienen eine Chance. Dies ist die ideale Frage für eine Abstammungsbibliothek mit Referenz- oder Wissensdatenbank. Aber vielleicht verdient die akzeptierte Antwort auch einen Anreiz für die zusätzliche Beinarbeit? Es gibt immer noch nichts Akzeptierteres als SO, also wo sonst? Sogar SO versuchte und spielte mit der Idee, eine Dokumentationsseite zu erstellen - und scheiterte. Nichts zu ersetzen SO ...
YoYo

Antworten:

201

Dies ist der einfachste JavaScript-SOAP-Client, den ich erstellen kann.

<html>
<head>
    <title>SOAP JavaScript Client Test</title>
    <script type="text/javascript">
        function soap() {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open('POST', 'https://somesoapurl.com/', true);

            // build SOAP request
            var sr =
                '<?xml version="1.0" encoding="utf-8"?>' +
                '<soapenv:Envelope ' + 
                    'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
                    'xmlns:api="http://127.0.0.1/Integrics/Enswitch/API" ' +
                    'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' +
                    'xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">' +
                    '<soapenv:Body>' +
                        '<api:some_api_call soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
                            '<username xsi:type="xsd:string">login_username</username>' +
                            '<password xsi:type="xsd:string">password</password>' +
                        '</api:some_api_call>' +
                    '</soapenv:Body>' +
                '</soapenv:Envelope>';

            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4) {
                    if (xmlhttp.status == 200) {
                        alert(xmlhttp.responseText);
                        // alert('done. use firebug/console to see network response');
                    }
                }
            }
            // Send the POST request
            xmlhttp.setRequestHeader('Content-Type', 'text/xml');
            xmlhttp.send(sr);
            // send request
            // ...
        }
    </script>
</head>
<body>
    <form name="Demo" action="" method="post">
        <div>
            <input type="button" value="Soap" onclick="soap();" />
        </div>
    </form>
</body>
</html> <!-- typo -->
stackoverflow128
quelle
2
Was ist mit dem Senden eines <soapenv: Header>? Ich habe versucht, meine Header-Tags in die Variable sr zu integrieren, aber der Server hat eine leere Seife erhalten: Header
Boiler Bill
Das hat bei mir funktioniert! (nach dem Ersetzen der SOAP-Service-URL durch eine echte und dem Deaktivieren der domänenübergreifenden Einschränkungen in meinem Browser, wie von @Prestaul impliziert)
Niko Bellic
Ich entwickle eine plattformübergreifende App in Nativescript für Android / iOS. Ich möchte SOAP-Webdienste verwenden. Bitte führen Sie mich für das gleiche. Ich habe den obigen Code für die SOAP-Anfrage verwendet und möchte das SOAP-Antwortformat, wie mit der Antwort umgegangen wird. Bitte überprüfen Sie meine Frage - stackoverflow.com/questions/37745840/…
Onkar Nene
Musste dies kürzlich verwenden, um Legacy-Code zu unterstützen. Es ist ein Problem mit dem fehlenden Header aufgetreten, bei dem eine "ContractFilter-Nichtübereinstimmung am EndpointDispatcher" aufgetreten ist. Hinzufügen xmlhttp.setRequestHeader('SOAPAction', 'http://myurl.com/action');kurz vor dem xmlhttp.send(sr)Fixieren.
RDRick
80

Die Art und Weise, wie Browser mit XMLHttpRequest umgehen, weist viele Besonderheiten auf. Dieser JS-Code funktioniert in allen Browsern:
https://github.com/ilinsky/xmlhttprequest

Dieser JS-Code konvertiert XML in benutzerfreundliche JavaScript-Objekte:
http://www.terracoder.com/index.php/xml-objectifier

Der obige JS-Code kann in die Seite aufgenommen werden, um Ihre Anforderungen an keine externe Bibliothek zu erfüllen.

var symbol = "MSFT"; 
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "http://www.webservicex.net/stockquote.asmx?op=GetQuote",true);
xmlhttp.onreadystatechange=function() {
 if (xmlhttp.readyState == 4) {
  alert(xmlhttp.responseText);
  // http://www.terracoder.com convert XML to JSON 
  var json = XMLObjectifier.xmlToJSON(xmlhttp.responseXML);
  var result = json.Body[0].GetQuoteResponse[0].GetQuoteResult[0].Text;
  // Result text is escaped XML string, convert string to XML object then convert to JSON object
  json = XMLObjectifier.xmlToJSON(XMLObjectifier.textToXML(result));
  alert(symbol + ' Stock Quote: $' + json.Stock[0].Last[0].Text); 
 }
}
xmlhttp.setRequestHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote");
xmlhttp.setRequestHeader("Content-Type", "text/xml");
var xml = '<?xml version="1.0" encoding="utf-8"?>' +
 '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
                'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' +
                'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' + 
   '<soap:Body> ' +
     '<GetQuote xmlns="http://www.webserviceX.NET/"> ' +
       '<symbol>' + symbol + '</symbol> ' +
     '</GetQuote> ' +
   '</soap:Body> ' +
 '</soap:Envelope>';
xmlhttp.send(xml);
// ...Include Google and Terracoder JS code here...

Zwei weitere Optionen:

Chris Stuart
quelle
Was soll ich tun, wenn ich mehrere Umschläge übergeben möchte?
Ajay Patel
Ich benutze den obigen Code, aber xmlhttp.responseText ergibt immer null. Kannst du mir einige Links zur Verfügung stellen, um den Fehler zu überwinden
user969275
Link für das Entfernen von Google Code: github.com/ilinsky/xmlhttprequest
ToastyMallows
48

Dies ist mit reinem JavaScript nur möglich, wenn sich der Webdienst in derselben Domain wie Ihre Seite befindet.Bearbeiten: In 2008 und in IE <10 kann dies nicht mit reinem Javascript durchgeführt werden, es sei denn, der Dienst befindet sich in derselben Domain wie Ihre Seite.

Wenn sich der Webdienst in einer anderen Domäne befindet [und Sie IE <10 unterstützen müssen], müssen Sie eine Proxyseite in Ihrer eigenen Domäne verwenden, die die Ergebnisse abruft und an Sie zurücksendet. Wenn Sie keine alte IE-Unterstützung benötigen, müssen Sie Ihrem Service CORS-Unterstützung hinzufügen. In beiden Fällen sollten Sie so etwas wie die von timyates vorgeschlagene Bibliothek verwenden, da Sie die Ergebnisse nicht selbst analysieren müssen.

Wenn sich der Webdienst in Ihrer eigenen Domain befindet, verwenden Sie SOAP nicht. Es gibt keinen guten Grund dafür. Wenn sich der Webdienst in Ihrer eigenen Domain befindet, ändern Sie ihn so, dass er JSON zurückgibt und sich die Mühe erspart, alle mit SOAP verbundenen Probleme zu lösen.

Die kurze Antwort lautet: Stellen Sie keine SOAP-Anfragen aus Javascript. Verwenden Sie einen Webdienst, um Daten von einer anderen Domäne anzufordern. Wenn Sie dies tun, analysieren Sie die Ergebnisse auf der Serverseite und geben Sie sie in einer js-freundlichen Form zurück.

Prestaul
quelle
1
Der SOAP-Server soll auch eine HTML-Seite zum einfachen Testen und Auswerten bereitstellen. Der Client würde sich in derselben Domain befinden. Die Nichtverwendung von SOAP für das Frontend scheint die akzeptierte Ansicht zu sein. Irgendwelche Kommentare, warum? Bitte zur neuen Frage hinzufügen: stackoverflow.com/questions/127038
Thomas Bratt
1
Es macht keinen Sinn, dort zu antworten ... Ich stimme Gizmo in allen drei Punkten zu. XML ist aufgebläht und eine Herausforderung für js, während JSON präzise und nativ ist.
Prestaul
10
re "kann nicht gemacht werden": Heute kann es mit (meistens) reinem JavaScript gemacht werden, wenn der Client Cross-Origin Resource Sharing unterstützt . Hoffentlich wird es in 3-4 Jahren universell verfügbar sein.
Constantin
2
@Constantin, CORS erlaubt dies, wenn Sie nur neuere Browser unterstützen möchten und wenn Sie die Kontrolle über den Server haben und dort auch CORS-Unterstützung hinzufügen können. Abgesehen davon würde ich immer noch argumentieren, dass SOAP-Aufrufe nur zwischen Servern erfolgen sollten und der Client etwas JS-freundlicheres wie JSON verwenden sollte.
Prestaul
1
@NikoBellic, das ein browserbasierter Client möglicherweise verwendet XMLHttpRequest, wahrscheinlich über eine Bibliothek wie jquery. Ein Knotenclient würde etwas anderes verwenden. Die meisten Webdienste verwenden REST als Leitfaden für das Entwerfen ihrer API, aber es gibt viele gute Muster. Der Schlüssel hier ist, dass die Anforderungs- / Antwortkörper JSON sind, da Javascript-Clients (Browser / Knoten / überall) JSON nativ verstehen.
Prestaul
14

Sie können das Plugin jquery.soap verwenden , um die Arbeit für Sie zu erledigen.

Dieses Skript verwendet $ .ajax, um einen SOAPEnvelope zu senden. Es kann XML-DOM, XML-Zeichenfolge oder JSON als Eingabe verwenden, und die Antwort kann entweder als XML-DOM, XML-Zeichenfolge oder JSON zurückgegeben werden.

Beispiel für die Verwendung auf der Website:

$.soap({
    url: 'http://my.server.com/soapservices/',
    method: 'helloWorld',

    data: {
        name: 'Remy Blom',
        msg: 'Hi!'
    },

    success: function (soapResponse) {
        // do stuff with soapResponse
        // if you want to have the response as JSON use soapResponse.toJSON();
        // or soapResponse.toString() to get XML string
        // or soapResponse.toXML() to get XML DOM
    },
    error: function (SOAPResponse) {
        // show error
    }
});
Yaakov Ellis
quelle
8

Thomas:

JSON wird für die Front-End-Verwendung bevorzugt, da es sich um Javascript handelt. Daher müssen Sie sich nicht mit XML befassen. SOAP ist aus diesem Grund ein Schmerz ohne Verwendung einer Bibliothek. Jemand erwähnte SOAPClient, eine gute Bibliothek, wir haben damit für unser Projekt begonnen. Es gab jedoch einige Einschränkungen und wir mussten große Teile davon neu schreiben. Es wurde als SOAPjs veröffentlicht und unterstützt die Übergabe komplexer Objekte an den Server. Es enthält einen Beispiel-Proxy-Code, um Dienste aus anderen Domänen zu nutzen.

Richard June
quelle
2
"JSON wird für die Front-End-Verwendung bevorzugt, da es sich um Javascript handelt." - JSON ist kein JavaScript. (Es sieht aus wie JavaScript.)
nnnnnn
2
en.wikipedia.org/wiki/JSON - steht wörtlich für „JavaScript Object Notation“, und während ich damit einverstanden , dass JSON ist eine Spezifikation keine Sprache und ist dafür entschieden „nicht javascript“ Sie müssen sich einig , dass der Weg , es ist benannt könnte Leute leicht verwirren.
P. Roe
8

Hat jemand das versucht? https://github.com/doedje/jquery.soap

Scheint sehr einfach zu implementieren.

Beispiel:

$.soap({
url: 'http://my.server.com/soapservices/',
method: 'helloWorld',

data: {
    name: 'Remy Blom',
    msg: 'Hi!'
},

success: function (soapResponse) {
    // do stuff with soapResponse
    // if you want to have the response as JSON use soapResponse.toJSON();
    // or soapResponse.toString() to get XML string
    // or soapResponse.toXML() to get XML DOM
},
error: function (SOAPResponse) {
    // show error
}
});

wird darin enden, dass

<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <helloWorld>
        <name>Remy Blom</name>
        <msg>Hi!</msg>
    </helloWorld>
  </soap:Body>
</soap:Envelope>
Geekasso
quelle
4
<html>
 <head>
    <title>Calling Web Service from jQuery</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#btnCallWebService").click(function (event) {
                var wsUrl = "http://abc.com/services/soap/server1.php";
                var soapRequest ='<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">   <soap:Body> <getQuote xmlns:impl="http://abc.com/services/soap/server1.php">  <symbol>' + $("#txtName").val() + '</symbol>   </getQuote> </soap:Body></soap:Envelope>';
                               alert(soapRequest)
                $.ajax({
                    type: "POST",
                    url: wsUrl,
                    contentType: "text/xml",
                    dataType: "xml",
                    data: soapRequest,
                    success: processSuccess,
                    error: processError
                });

            });
        });

        function processSuccess(data, status, req) { alert('success');
            if (status == "success")
                $("#response").text($(req.responseXML).find("Result").text());

                alert(req.responseXML);
        }

        function processError(data, status, req) {
        alert('err'+data.state);
            //alert(req.responseText + " " + status);
        } 

    </script>
</head>
<body>
    <h3>
        Calling Web Services with jQuery/AJAX
    </h3>
    Enter your name:
    <input id="txtName" type="text" />
    <input id="btnCallWebService" value="Call web service" type="button" />
    <div id="response" ></div>
</body>
</html>

Hören ist am besten JavaScript mit SOAP Tutorial mit Beispiel.

http://www.codeproject.com/Articles/12816/JavaScript-SOAP-Client

Hkachhia
quelle
3

Einige großartige Beispiele (und ein vorgefertigter JavaScript-SOAP-Client!) Hier: http://plugins.jquery.com/soap/

Überprüfen Sie die Readme-Datei und beachten Sie die Einschränkungen des Browsers mit demselben Ursprung.

kmiklas
quelle
3

Nutzen Sie SOAP-Webdienste ganz einfach mit JavaScript -> Listing B.

function fncAddTwoIntegers(a, b)
{
    varoXmlHttp = new XMLHttpRequest();
    oXmlHttp.open("POST",
 "http://localhost/Develop.NET/Home.Develop.WebServices/SimpleService.asmx'",
 false);
    oXmlHttp.setRequestHeader("Content-Type", "text/xml");
    oXmlHttp.setRequestHeader("SOAPAction", "http://tempuri.org/AddTwoIntegers");
    oXmlHttp.send(" \
<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' \
xmlns:xsd='http://www.w3.org/2001/XMLSchema' \
 xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> \
  <soap:Body> \
    <AddTwoIntegers xmlns='http://tempuri.org/'> \
      <IntegerOne>" + a + "</IntegerOne> \
      <IntegerTwo>" + b + "</IntegerTwo> \
    </AddTwoIntegers> \
  </soap:Body> \
</soap:Envelope> \
");
    return oXmlHttp.responseXML.selectSingleNode("//AddTwoIntegersResult").text;
}

Dies erfüllt möglicherweise nicht alle Ihre Anforderungen, ist jedoch ein Anfang bei der tatsächlichen Beantwortung Ihrer Frage. (Ich habe XMLHttpRequest () für ActiveXObject ("MSXML2.XMLHTTP") gewechselt .)

user423430
quelle
1

Das einfachste Beispiel wäre:

  1. Benutzereingaben abrufen.
  2. Erstellen einer ähnlichen XML-SOAP-Nachricht

    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                   xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <GetInfoByZIP xmlns="http://www.webserviceX.NET">
          <USZip>string</USZip>
        </GetInfoByZIP>
      </soap:Body>
    </soap:Envelope>
  3. POST-Nachricht an die Webservice-URL mit XHR

  4. Parsen der XML-SOAP-Antwort des Webservices ähnlich

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <soap:Body>
      <GetInfoByZIPResponse xmlns="http://www.webserviceX.NET">
       <GetInfoByZIPResult>
        <NewDataSet xmlns="">
         <Table>
          <CITY>...</CITY>
          <STATE>...</STATE>
          <ZIP>...</ZIP>
          <AREA_CODE>...</AREA_CODE>
          <TIME_ZONE>...</TIME_ZONE>
         </Table>
        </NewDataSet>
       </GetInfoByZIPResult>
      </GetInfoByZIPResponse>
     </soap:Body>
    </soap:Envelope>
  5. Präsentieren der Ergebnisse für den Benutzer.

Aber ohne externe JavaScript-Bibliotheken ist das ein großer Aufwand.

Constantin
quelle
9
Kein Javacript-Beispiel.
Thomas Bratt
Nicht einmal der erste Teil, den Sie nicht beantwortet haben - Seien Sie funktional (mit anderen Worten, es funktioniert tatsächlich).
Shahar Eldad
0
function SoapQuery(){
  var namespace = "http://tempuri.org/";
  var site = "http://server.com/Service.asmx";
  var xmlhttp = new ActiveXObject("Msxml2.ServerXMLHTTP.6.0");
  xmlhttp.setOption(2,  13056 );  /* if use standard proxy */
  var args,fname =  arguments.callee.caller.toString().match(/ ([^\(]+)/)[1]; /*Имя вызвавшей ф-ции*/
  try { args =   arguments.callee.caller.arguments.callee.toString().match(/\(([^\)]+)/)[1].split(",");  
    } catch (e) { args = Array();};
  xmlhttp.open('POST',site,true);  
  var i, ret = "", q = '<?xml version="1.0" encoding="utf-8"?>'+
   '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+
   '<soap:Body><'+fname+ ' xmlns="'+namespace+'">';
  for (i=0;i<args.length;i++) q += "<" + args[i] + ">" + arguments.callee.caller.arguments[i] +  "</" + args[i] + ">";
  q +=   '</'+fname+'></soap:Body></soap:Envelope>';
            // Send the POST request
            xmlhttp.setRequestHeader("MessageType","CALL");
            xmlhttp.setRequestHeader("SOAPAction",namespace + fname);
            xmlhttp.setRequestHeader('Content-Type', 'text/xml');
            //WScript.Echo("Запрос XML:" + q);
            xmlhttp.send(q);
     if  (xmlhttp.waitForResponse(5000)) ret = xmlhttp.responseText;
    return ret;
  };





function GetForm(prefix,post_vars){return SoapQuery();};
function SendOrder2(guid,order,fio,phone,mail){return SoapQuery();};

function SendOrder(guid,post_vars){return SoapQuery();};
Nick
quelle
0

Angularjs $ http-Wrap basiert auf XMLHttpRequest . Solange der Header-Inhalt festgelegt ist, reicht der folgende Code aus.

"Content-Type": "text/xml; charset=utf-8"

Beispielsweise:

function callSoap(){
var url = "http://www.webservicex.com/stockquote.asmx";
var soapXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://www.webserviceX.NET/\"> "+
         "<soapenv:Header/> "+
         "<soapenv:Body> "+
         "<web:GetQuote> "+
         "<web:symbol></web:symbol> "+
         "</web:GetQuote> "+
         "</soapenv:Body> "+
         "</soapenv:Envelope> ";

    return $http({
          url: url,  
          method: "POST",  
          data: soapXml,  
          headers: {  
              "Content-Type": "text/xml; charset=utf-8"
          }  
      })
      .then(callSoapComplete)
      .catch(function(message){
         return message;
      });

    function callSoapComplete(data, status, headers, config) {
        // Convert to JSON Ojbect from xml
        // var x2js = new X2JS();
        // var str2json = x2js.xml_str2json(data.data);
        // return str2json;
        return data.data;

    }

}
ChokYeeFan
quelle
0

Die Frage lautet: "Was ist das einfachste SOAP-Beispiel mit Javascript?"

Diese Antwort ist eher ein Beispiel in der Node.js- Umgebung als ein Browser. (Nennen wir das Skript soap-node.js) Und wir werden den öffentlichen SOAP-Webdienst von Europe PMC als Beispiel verwenden, um die Referenzliste eines Artikels zu erhalten.

const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
const DOMParser = require('xmldom').DOMParser;

function parseXml(text) {
    let parser = new DOMParser();
    let xmlDoc = parser.parseFromString(text, "text/xml");
    Array.from(xmlDoc.getElementsByTagName("reference")).forEach(function (item) {
        console.log('Title: ', item.childNodes[3].childNodes[0].nodeValue);
    });

}

function soapRequest(url, payload) {
    let xmlhttp = new XMLHttpRequest();
    xmlhttp.open('POST', url, true);

    // build SOAP request
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200) {
                parseXml(xmlhttp.responseText);
            }
        }
    }

    // Send the POST request
    xmlhttp.setRequestHeader('Content-Type', 'text/xml');
    xmlhttp.send(payload);
}

soapRequest('https://www.ebi.ac.uk/europepmc/webservices/soap', 
    `<?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Header />
    <S:Body>
        <ns4:getReferences xmlns:ns4="http://webservice.cdb.ebi.ac.uk/"
            xmlns:ns2="http://www.scholix.org"
            xmlns:ns3="https://www.europepmc.org/data">
            <id>C7886</id>
            <source>CTX</source>
            <offSet>0</offSet>
            <pageSize>25</pageSize>
            <email>ukpmc-phase3-wp2b---do-not-reply@europepmc.org</email>
        </ns4:getReferences>
    </S:Body>
    </S:Envelope>`);

Bevor Sie den Code ausführen, müssen Sie zwei Pakete installieren:

npm install xmlhttprequest
npm install xmldom

Jetzt können Sie den Code ausführen:

node soap-node.js

Und Sie sehen die Ausgabe wie folgt:

Title:  Perspective: Sustaining the big-data ecosystem.
Title:  Making proteomics data accessible and reusable: current state of proteomics databases and repositories.
Title:  ProteomeXchange provides globally coordinated proteomics data submission and dissemination.
Title:  Toward effective software solutions for big biology.
Title:  The NIH Big Data to Knowledge (BD2K) initiative.
Title:  Database resources of the National Center for Biotechnology Information.
Title:  Europe PMC: a full-text literature database for the life sciences and platform for innovation.
Title:  Bio-ontologies-fast and furious.
Title:  BioPortal: ontologies and integrated data resources at the click of a mouse.
Title:  PubMed related articles: a probabilistic topic-based model for content similarity.
Title:  High-Impact Articles-Citations, Downloads, and Altmetric Score.
Yuci
quelle