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.
var request = new XMLHttpRequest();
function wywWS() //wywołanie webService
{
var par;
var par2;
par = "http://ws.cdyne.com/WeatherWS/Weather.asmx/GetCityForecastByZIP?ZIP=";
par2 = document.getElementById("liniaEd").value;
par += par2;
request.onreadystatechange = myStatusProc;
request.open( "GET", par , true );
request.send();
}
function myStatusProc() //obsługa odpowiedzi
{
var xsltDoc;
var xsltFile="test.xslt";
if (request.readyState==4)
{// 4 = "załadowana"
if (request.status==200)
{// 200 = OK
var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
xmlDoc = request.responseXML;
//załaduj xslt
xsltDoc = new ActiveXObject('Microsoft.XMLDOM');
xsltDoc.async = false;
xsltDoc.load(xsltFile);
//transformacja
var ex=xmlDoc.transformNode(xsltDoc);
//zwracamy rezultat transformacji do przeglądarki
document.getElementById("idZawStr").innerHTML=ex;
}
else
{
alert("Problem z odbiorem danych XML" );
}
}
}
<BODY id="idZawStr">Serwis pogodowy:
<BR>Podaj kod zip:
<INPUT id="liniaEd" value=12502>
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:ws="http://ws.cdyne.com/WeatherWS/">
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h2>Tekst</h2>
<table border="1">
<xsl:for-each select="ws:ForecastReturn">
<tr>
<td><xsl:value-of select="ws:Success"/> </td>
<td><xsl:value-of select="ws:ResponseText"/> </td>
<td><xsl:value-of select="ws:State"/> </td>
<td><xsl:value-of select="ws:City"/> </td>
<xsl:for-each select="ws:ForecastResult/ws:Forecast">
<tr>
<td><xsl:value-of select="ws:Date"/> </td>
<td>
<xsl:if test="ws:WeatherID = -1">
<img src="http://ws.cdyne.com/WeatherWS/Images/thunderstorms.gif"/>
</xsl:if>
</td>
</tr>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</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:
<script type="text/javascript" language="javascript">
var xmlhttp;
function on_click()
{
//deklaracja zmiennej tekstowej
var xmlToSend = "<?xml version='1.0' encoding='utf-8'?>";
xmlToSend += "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' ";
xmlToSend += "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>";
xmlToSend += "<soap:Body>";
xmlToSend += "<GetCityForecastByZIP xmlns='http://ws.cdyne.com/WeatherWS/'>";
xmlToSend += "<ZIP>12502</ZIP></GetCityForecastByZIP>";
xmlToSend += "</soap:Body></soap:Envelope>";
//utworzenie dokumentuwiadomosci xml
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.loadXML(xmlToSend);
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange = state_Change;
xmlhttp.open("POST", "http://ws.cdyne.com/WeatherWS/Weather.asmx", false);
xmlhttp.setRequestHeader ("SOAPAction", "http://ws.cdyne.com/WeatherWS/GetCityForecastByZIP");
xmlhttp.setRequestHeader ("Content-Type", "text/xml");
xmlhttp.send(xmldoc);
var objResponse = document.getElementById("zawartoscHtml");
objResponse.innerText = xmlhttp.responseXML.xml;
}
function state_Change()
{
// if xmlhttp shows "loaded"
if (xmlhttp.readyState==4)
{
// if "OK"
if (xmlhttp.status==200)
{
alert("OK");
}
else
{
alert("Problem retrieving XML data");
}
}
}
<body id="zawartoscHtml">
<h1>Click the button to call the web service
</h1>
<input type="button" onclick="return on_click();" value="OK"/>
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.
Ten post edytował torzba 30.01.2009, 17:44:28