Ich versuche, ein Datenansicht-Webpart (über SPD 2007) zu verwenden, um die Ergebnisse eines SOAP-basierten Webdienstes zu konsumieren und Teile dieser Ergebnisse mithilfe von XSL-Transformationen zu rendern. Das Problem, das ich habe, ist, dass der Designer keine große Hilfe ist, weil das Schema für den Webdienst nicht wirklich die Elemente der Ergebnisse enthält, so dass es keine Möglichkeit gibt, Drag & Drop aus der Datenquelle in das Webpart zu ziehen, und die manuellen Transformationen, die ich versucht habe, funktionieren nicht.
Hier ist die Definition des Webdienstes:
<?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>string</symbol>
</GetQuote>
</soap:Body>
</soap:Envelope>
Und die Definition der Antwort:
<?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>
<GetQuoteResponse xmlns="http://www.webserviceX.NET/">
<GetQuoteResult>string</GetQuoteResult>
</GetQuoteResponse>
</soap:Body>
</soap:Envelope>
Die Abfragedefinition ist kein Problem - Sie geben einfach ein Börsenkürzel als String an. In den Ergebnissen sehen Sie jedoch, wovon ich spreche. Es definiert das Ergebnis als eine Zeichenfolge.
In SPD2007 umfasst die Datenquelle so gut wie nur soap:Envelope/soap:Body/GetQuoteResponse/GetQuoteResult
, aber die tatsächlichen Ergebnisse in der Ergebniszeichenfolge sehen so aus:
<StockQuotes>
<Stock>
<Symbol>MSFT</Symbol>
<Last>28.465</Last>
<Date>3/3/2010</Date>
<Time>1:24pm</Time>
<Change>+0.005</Change>
<Open>28.52</Open>
<High>28.61</High>
<Low>28.35</Low>
<Volume>28380812</Volume>
<MktCap>249.7B</MktCap>
<PreviousClose>28.46</PreviousClose>
<PercentageChange>+0.02%</PercentageChange>
<AnnRange>14.87 - 31.50</AnnRange>
<Earns>1.815</Earns>
<P-E>15.68</P-E>
<Name>Microsoft Corpora</Name>
</Stock>
</StockQuotes>
Ich habe versucht, ein XSL-Stylesheet wie dieses in der Datenansicht Webpart einzurichten:
<xsl:stylesheet xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ddw1="http://www.webserviceX.NET/"
version="1.0"
exclude-result-prefixes="xsl msxsl ddwrt"
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:ddwrt2="urn:frontpage:internal">
<xsl:output method="html" indent="yes"/>
<xsl:param name="dvt_apos">'</xsl:param>
<xsl:template match="/soap:Envelope/soap:Body/ddw1:GetQuoteResponse">
<xsl:value-of select="*" />
</xsl:template>
</xsl:stylesheet>
Dies tut so ziemlich das, was man erwarten würde: Es wird die gesamte Ergebniszeichenkette wiedergegeben. Wenn ich jedoch ersetze
<xsl:template match="/soap:Envelope/soap:Body/ddw1:GetQuoteResponse">
<xsl:value-of select="*" />
</xsl:template>
mit
<xsl:template match="/soap:Envelope/soap:Body/ddw1:GetQuoteResponse">
<xsl:value-of select="//Symbol" />
</xsl:template>
Ich bekomme nichts. Was ist los? Wie verwende ich XSL, um die XML in der Zeichenfolge Ergebnis ohne ein Schema zu holen?