Link to home
Start Free TrialLog in
Avatar of sspachtholz
sspachtholz

asked on

Help parsing an XML response from a SOAP server

I've created a page that now sends off a proper request to a SOAP server and gets a response back.  The SOAP request is to log into the system.  The response has a token code in the XML that I need to use in all subsequent requests.

Today, the page displays the entire response as text on the web page.  What I need to do next is parse the response and store the token as a variable.

I've read some online tutorials and tried to hack together some code.  But its just not working.  

In the code below, the submit button calls the makeSoapRequest() function.  That function then calls the parseXMLDocument() function.  This new parseXMLDocument() function is where I am having problems.

Any assistance would be greatly appreciated.

----Here is the code for the page--------

<html>
<head>
<script language="javascript">

function makeSoapRequest(form){
      // create the payload of the SOAP request
      var soapData = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://XXXXX/jboss-net/services/sylantro/auth" xmlns:intf="http://XXXXX/jboss-net/services/sylantro/auth" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://webapi.sylantro.com/webapi" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> \n' +
            '<SOAP-ENV:Body> \n' +
            '<mns:loginUser xmlns:mns="http://XXXXX/jboss-net/services/sylantro/auth" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> \n' +
            '<in0 xsi:type="tns1:EULoginRequest"> \n' +
            '<applicationName xsi:type="xsd:string">USERPORTAL</applicationName> \n' +
            '<tenantName xsi:type="xsd:string" /> \n' +
            '<userName xsi:type="xsd:string">' + form.username.value + '</userName> \n' +
            '<userPassword xsi:type="xsd:string">' + form.password.value  + '</userPassword> \n' +
            '</in0> \n' +
            '</mns:loginUser> \n' +
            '</SOAP-ENV:Body> \n' +
            '</SOAP-ENV:Envelope> \n';
            //alert(soapData);

      try{
            netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
      }catch (e) {
            //alert("Permission UniversalBrowserRead denied.");
      };

      try{
            if (window.XMLHttpRequest){
            req = new XMLHttpRequest();
      }else{
            req = new ActiveXObject("Microsoft.XMLHTTP");
      }
      }catch(e){
 
      };
 
      req.open("POST", "http://XXXXX/jboss-net/services/sylantro/auth", false);
      req.setRequestHeader("Content-Length", soapData.length);
      req.setRequestHeader("Content-Type", "text/xml");
      req.setRequestHeader("Soapaction", "sylantro/auth");
      req.send(soapData);
      
      document.getElementById('response').innerHTML = req.responseText;
             var xmlDocument1 = req.responseXML;
      parseXmlDocument(xmlDocument1);
}


function parseXmlDocument(docName){

      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.async = "false";
      xmlDoc.load(docName);

      alert(xmlDoc.DocumentElement.firstchild;);
      var tokencode = xmlDoc.DocumentElement.firstchild;

};

</script>
</head>
<body>

<FORM NAME="myform" ACTION="" METHOD="GET">
      <p>Username: <INPUT TYPE="text" NAME="username" VALUE=""></p>
      <p>Password: <INPUT TYPE="text" NAME="password" VALUE=""></p>
      <INPUT TYPE="button" NAME="submit" Value="Submit" onClick="makeSoapRequest(this.form)">
</FORM>

<br><hr><br>

<div align="left">
      <span id="response"></span>
</div>

</body>
</html>


----This is what the SOAP response looks like that I need to parse-----

  <?xml version="1.0" encoding="UTF-8" ?>
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
- <ns1:loginUserResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://XXXXX/jboss-net/services/sylantro/auth">
- <loginUserReturn xsi:type="ns2:AuthenticationInfo" xmlns:ns2="http://webapi.sylantro.com/webapi">
  <locale xsi:type="xsd:string">en</locale>
  <token xsi:type="xsd:string">61813599c32032fa5cb3c24f6ab74902b1c41d257b0fc97494f7a91028731eb52fef368934b412cd3b7f49fbe47877f8f7f072e7d37609abc5bc3c2c3b6981cc4d2f6e0789d6341e3a8d0d875e5a5773ebca32dda25298a</token>
  <userType xsi:type="xsd:int">1</userType>
  </loginUserReturn>
  </ns1:loginUserResponse>
  </soapenv:Body>
  </soapenv:Envelope>
Avatar of Michel Plungjan
Michel Plungjan
Flag of Denmark image

var token = xmlDoc.getElementByTagName('token').something

Like nodeValue or text or value - I cannot remember off the top of my head
ASKER CERTIFIED SOLUTION
Avatar of flipz
flipz
Flag of Canada image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Sorry - I mean:

var strToken = xmlDoc.getElementsByTagName('token')[0].text;
alert(strToken);
Avatar of sspachtholz
sspachtholz

ASKER

It appears to be .text from what I've found.  However, I tried value and NodeValue as well, just to be thorough.

I'm still getting at error at this line saying "Object doesn't support this property or method."

      var token = xmlDoc.getElementByTagName("token").value;

Here is the complete code as it is now.

<html>
<head>
<script language="javascript">

function makeSoapRequest(form){
      // create the payload of the SOAP request
      var soapData = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://voiceplus.penntele.com/jboss-net/services/sylantro/auth" xmlns:intf="http://voiceplus.penntele.com/jboss-net/services/sylantro/auth" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://webapi.sylantro.com/webapi" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> \n' +
            '<SOAP-ENV:Body> \n' +
            '<mns:loginUser xmlns:mns="http://voiceplus.penntele.com/jboss-net/services/sylantro/auth" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> \n' +
            '<in0 xsi:type="tns1:EULoginRequest"> \n' +
            '<applicationName xsi:type="xsd:string">USERPORTAL</applicationName> \n' +
            '<tenantName xsi:type="xsd:string" /> \n' +
            '<userName xsi:type="xsd:string">' + form.username.value + '</userName> \n' +
            '<userPassword xsi:type="xsd:string">' + form.password.value  + '</userPassword> \n' +
            '</in0> \n' +
            '</mns:loginUser> \n' +
            '</SOAP-ENV:Body> \n' +
            '</SOAP-ENV:Envelope> \n';
            //alert(soapData);

      try{
            netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
      }catch(e){
            //alert("Permission UniversalBrowserRead denied.");
      };

      try{
            if (window.XMLHttpRequest){
            req = new XMLHttpRequest();
      }else{
            req = new ActiveXObject("Microsoft.XMLHTTP");
      }
      }catch(e){
 
      };
 
      req.open("POST", "http://voiceplus.penntele.com/jboss-net/services/sylantro/auth", false);
      req.setRequestHeader("Content-Length", soapData.length);
      req.setRequestHeader("Content-Type", "text/xml");
      req.setRequestHeader("Soapaction", "sylantro/auth");
      req.send(soapData);
      
      document.getElementById('response').innerHTML = req.responseText;
             var xmlDocument1 = req.responseXML;
      parseXmlDocument(xmlDocument1);
}


function parseXmlDocument(docName){

      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.async = "false";
      xmlDoc.load(docName);

      var token = xmlDoc.getElementByTagName("token").text;
      alert(token);

};

</script>
</head>
<body>

<form name="myform" action="" method="GET">
      <p>Username: <input type="text" name="username" value=""></p>
      <p>Password: <input type="text" name="password" value=""></p>
      <input type="button" name="submit" value="Submit" onClick="makeSoapRequest(this.form)">
</form>

<br><hr><br>

<div align="left">
      <span id="response"></span>
</div>

</body>
</html>
Flipz, that worked well.

Thanks for the guys.
No problem sspachtholz - glad to help. And thanks to you - the points you awarded me just put me over the 150,000 total - thanks for making me a Guru overall!!