Use the example XSLT stylesheet to understand the structure required by Unwired Platfrom.
The bolded elements are required. The <xsl:stylesheet> needs a <xsl:template> element. The first child element of <xsl:template> must be the <data> that also requires the a metadata <Record> element.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; xmlns:ns1="urn:Sample_Enrollments" exclude-result-prefixes="ns1"> <xsl:template match="//ns1:OpGetListResponse"> <data> <Record> <Field op_label="Class_Cost" op_bindpath="getListValues[].Class_Cost" op_position="1" op_datatype="DECIMAL" op_nullable="false">Class_Cost</Field> <Field op_label="Class_ID" op_bindpath="getListValues[].Class_ID" op_position="2" op_datatype="STRING" op_nullable="false">Class_ID</Field> <Field op_label="Class_Start_Date___Time" op_bindpath="getListValues[].Class_Start_Date___Time" op_position="3" op_datatype="DATETIME" op_nullable="false">Class_Start_Date___Time</Field> <Field op_label="Class_Title" op_bindpath="getListValues[].Class_Title" op_position="4" op_datatype="STRING" op_nullable="false">Class_Title</Field> <Field op_label="Enrollee_Login" op_bindpath="getListValues[].Enrollee_Login" op_position="5" op_datatype="STRING" op_nullable="false">Enrollee_Login</Field> <Field op_label="Temp_Number" op_bindpath="getListValues[].Temp_Number" op_position="6" op_datatype="INT" op_nullable="true">Temp_Number</Field> </Record> <xsl:for-each select="ns1:getListValues"> <Record> <Field> <xsl:attribute name="op_position">1</xsl:attribute> <xsl:value-of select="ns1:Class_Cost"/> </Field> <Field> <xsl:attribute name="op_position">2</xsl:attribute> <xsl:value-of select="ns1:Class_ID"/> </Field> <Field> <xsl:attribute name="op_position">3</xsl:attribute> <xsl:value-of select="ns1:Class_Start_Date___Time"/> </Field> <Field> <xsl:attribute name="op_position">4</xsl:attribute> <xsl:value-of select="ns1:Class_Title"/> </Field> <Field> <xsl:attribute name="op_position">5</xsl:attribute> <xsl:value-of select="ns1:Enrollee_Login"/> </Field> <Field> <xsl:attribute name="op_position">6</xsl:attribute> <xsl:value-of select="ns1:Temp_Number"/> </Field> </Record> </xsl:for-each> </data> </xsl:template> </xsl:stylesheet>
If you use this style sheet, the output generated by this transform would be:
<data> <Record> <Field op_label="Class_Cost" op_bindpath="getListValues[].Class_Cost" op_position="1" op_datatype="DECIMAL" op_nullable="false">Class_Cost</Field> <Field op_label="Class_ID" op_bindpath="getListValues[].Class_ID" op_position="2" op_datatype="STRING" op_nullable="false">Class_ID</Field> <Field op_label="Class_Start_Date___Time" op_bindpath="getListValues[].Class_Start_Date___Time" op_position="3" op_datatype="DATETIME" op_nullable="false">Class_Start_Date___Time</Field> <Field op_label="Class_Title" op_bindpath="getListValues[].Class_Title" op_position="4" op_datatype="STRING" op_nullable="false">Class_Title</Field> <Field op_label="Enrollee_Login" op_bindpath="getListValues[].Enrollee_Login" op_position="5" op_datatype="STRING" op_nullable="false">Enrollee_Login</Field> <Field op_label="Temp_Number" op_bindpath="getListValues[].Temp_Number" op_position="6" op_datatype="INT" op_nullable="true">Temp_Number</Field> </Record> <Record> <Field op_position="1">100.00</Field> <Field op_position="2">00001</Field> <Field op_position="3">2010-07-02T10:27:35-07:00</Field> <Field op_position="4">Managing Within the Law</Field> <Field op_position="5">Demo</Field> <Field op_position="6"/> </Record> <Record> <Field op_position="1">150.00</Field> <Field op_position="2">00005</Field> <Field op_position="3">2005-11-17T08:00:00-08:00</Field> <Field op_position="4">Microsoft Word for Beginners</Field> <Field op_position="5">Demo</Field> <Field op_position="6"/> </Record> <Record> <Field op_position="1">299.00</Field> <Field op_position="2">00006</Field> <Field op_position="3">2005-11-15T08:00:00-08:00</Field> <Field op_position="4">Meeting Planning and Facilitation</Field> <Field op_position="5">Demo</Field> <Field op_position="6"/> </Record> </data>