Witam,

Otóż muszę zrobić web service znalazłem sobie darmowy ale mam problem z pobieraniem danych.

Mam 2 pliki jeden html - który obsługuje cały serwis i szablon transformacji xslt.


  1.  
  2. <script type=text/javascript>
  3.  
  4.  
  5. var request = new XMLHttpRequest();
  6.  
  7.  
  8. function wywWS() //wywołanie webService
  9. {
  10. var par;
  11. var par2;
  12. par = "http://ws.cdyne.com/WeatherWS/Weather.asmx/GetCityForecastByZIP?ZIP=";
  13. par2 = document.getElementById("liniaEd").value;
  14. par += par2;
  15. request.onreadystatechange = myStatusProc;
  16. request.open( "GET", par , true );
  17. request.send();
  18. }
  19.  
  20.  
  21. function myStatusProc() //obsługa odpowiedzi
  22. {
  23.  
  24.  
  25. var xsltDoc;
  26. var xsltFile="test.xslt";
  27.  
  28. if (request.readyState==4)
  29. {// 4 = "załadowana"
  30. if (request.status==200)
  31. {// 200 = OK
  32.  
  33.  
  34.  
  35. var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
  36.  
  37. xmlDoc = request.responseXML;
  38.  
  39.  
  40.  
  41. //załaduj xslt
  42. xsltDoc = new ActiveXObject('Microsoft.XMLDOM');
  43.  
  44. xsltDoc.async = false;
  45. xsltDoc.load(xsltFile);
  46.  
  47. //transformacja
  48. var ex=xmlDoc.transformNode(xsltDoc);
  49.  
  50. //zwracamy rezultat transformacji do przeglądarki
  51. document.getElementById("idZawStr").innerHTML=ex;
  52.  
  53.  
  54. }
  55. else
  56. {
  57. alert("Problem z odbiorem danych XML" );
  58. }
  59. }
  60. }
  61.  
  62.  
  63. </HEAD>
  64.  
  65. <BODY id="idZawStr">Serwis pogodowy:<BR>Podaj kod zip: <INPUT id="liniaEd"
  66. value=12502>
  67. <FORM><INPUT onclick="wywWS()" type="button" value="WywolajWS"> </FORM></BODY></HTML>



  1. <?xml version="1.0" ?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3. xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:ws="http://ws.cdyne.com/WeatherWS/">
  4. <xsl:template match="/">
  5.  <html  xmlns="http://www.w3.org/1999/xhtml">
  6.  <body>
  7.    <h2>Tekst</h2>
  8.  
  9. <table border="1">
  10. <xsl:for-each select="ws:ForecastReturn">          
  11. <tr>
  12. <td><xsl:value-of select="ws:Success"/> </td>
  13. <td><xsl:value-of select="ws:ResponseText"/> </td>
  14. <td><xsl:value-of select="ws:State"/> </td>
  15. <td><xsl:value-of select="ws:City"/> </td>
  16.  
  17. <xsl:for-each select="ws:ForecastResult/ws:Forecast">
  18. <tr>
  19. <td><xsl:value-of select="ws:Date"/> </td>
  20. <td>
  21.      <xsl:if test="ws:WeatherID = -1">
  22.      <img src="http://ws.cdyne.com/WeatherWS/Images/thunderstorms.gif"/>
  23.      </xsl:if>
  24. </td>
  25. </tr>
  26. </xsl:for-each>
  27.  
  28. </tr>
  29. </xsl:for-each>
  30. </table>
  31.  
  32.  </body>
  33.  </html>
  34. </xsl:template>
  35. </xsl:stylesheet>



Cały problem w tym, że chcę pobierać dane przez SOAP a nie getem ;/

Mam kod również do pobierania xml przez SOAP:

  1.  
  2.  
  3.  
  4. <script type="text/javascript" language="javascript">
  5.  
  6. var xmlhttp;
  7.  
  8.  
  9. function on_click()
  10.  
  11. {
  12.  
  13. //deklaracja zmiennej tekstowej
  14.  
  15. var xmlToSend = "<?xml version='1.0' encoding='utf-8'?>";
  16.  
  17. xmlToSend += "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' ";
  18. xmlToSend += "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>";
  19.  
  20. xmlToSend += "<soap:Body>";
  21.  
  22. xmlToSend += "<GetCityForecastByZIP xmlns='http://ws.cdyne.com/WeatherWS/'>";
  23.  
  24. xmlToSend += "<ZIP>12502</ZIP></GetCityForecastByZIP>";
  25.  
  26. xmlToSend += "</soap:Body></soap:Envelope>";
  27.  
  28.  
  29. //utworzenie dokumentuwiadomosci xml
  30.  
  31. var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
  32.  
  33. xmldoc.loadXML(xmlToSend);
  34.  
  35.  
  36.  
  37. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  38.  
  39. xmlhttp.onreadystatechange = state_Change;
  40.  
  41. xmlhttp.open("POST", "http://ws.cdyne.com/WeatherWS/Weather.asmx", false);
  42.  
  43. xmlhttp.setRequestHeader ("SOAPAction", "http://ws.cdyne.com/WeatherWS/GetCityForecastByZIP");
  44.  
  45. xmlhttp.setRequestHeader ("Content-Type", "text/xml");
  46.  
  47. xmlhttp.send(xmldoc);
  48.  
  49.  
  50.  
  51. var objResponse = document.getElementById("zawartoscHtml");
  52.  
  53. objResponse.innerText = xmlhttp.responseXML.xml;
  54.  
  55. }
  56.  
  57.  
  58.  
  59. function state_Change()
  60.  
  61. {
  62.  
  63. // if xmlhttp shows "loaded"
  64.  
  65. if (xmlhttp.readyState==4)
  66.  
  67. {
  68.  
  69. // if "OK"
  70.  
  71. if (xmlhttp.status==200)
  72.  
  73. {
  74.  
  75. alert("OK");
  76.  
  77. }
  78.  
  79. else
  80.  
  81. {
  82.  
  83. alert("Problem retrieving XML data");
  84.  
  85. }
  86.  
  87. }
  88.  
  89. }
  90.  
  91.  
  92. </head>
  93.  
  94. <body id="zawartoscHtml">
  95.  
  96. <div>
  97.  
  98. <h1>Click the button to call the web service</h1>
  99.  
  100. <input type="button" onclick="return on_click();" value="OK"/>
  101.  
  102. </div>
  103.  
  104. <div id="responseDiv">
  105.  
  106.  
  107.  
  108. </div>
  109.  
  110. </body>
  111.  
  112. </html>


Cały problem moj polega na tym jak połączyć te oba skrypty aby Metoda SOAP pobierała dane i je od razu transformowała przez xstl tak jak to jest w 1 przypadku? Ponieważ nie znam się na tym i nie wiem jak to połączyć czy mógłbym prosić kogoś o pomoc w tych kodach. Z góry bardzo dziękuję i pozdrawiam.

P.S. Chciałbym aby strona z metoda SOAP działała identycznie jak ta pierwsza z GETem. i podpinała ten szablon transformacji jaki tutaj zamieściłem.