Hello all,
I have the following xml schema:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0">
<xs:element name="PercentTimeReport">
<xs:complexType>
<xs:sequence>
<xs:element name="ParamStartDate" type="xs:dateTime" />
<xs:element name="ParamEndDate" type="xs:dateTime" />
<xs:element name="ParamQuarterInt" type="xs:unsignedByte" />
<xs:element name="ParamProjID" nillable="true" />
<xs:element name="ParamStaffID" nillable="true" />
<xs:element name="ParamPercentRange" type="xs:unsignedByte" />
<xs:element name="Items">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Item">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:unsignedShort" />
<xs:element name="EmployeeName" type="xs:string" />
<xs:element name="StaffID" type="xs:unsignedShort" />
<xs:element name="Status" type="xs:string" />
<xs:element name="Date" type="xs:dateTime" />
<xs:element name="Department" type="xs:string" />
<xs:element name="DepartmentCode" type="xs:string" />
<xs:element name="Project" type="xs:string" />
<xs:element name="ProjectID" type="xs:unsignedByte" />
<xs:element name="Hours" type="xs:unsignedByte" />
<xs:element name="HoursPerWeek" type="xs:decimal" />
<xs:element name="PercentTime" type="xs:decimal" />
<xs:element name="ActualContact" type="xs:boolean" />
<xs:element name="Body" type="xs:string" />
<xs:element name="Issue" type="xs:string" />
<xs:element name="Activity" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xsd:schema>
and I'd like to generate an excel file that only shows the Items table in an ASP.NET 2.0 Web application. I really don't understand this code that I found (see below), or XSLT enough to get the output format that I need. Does anyone know XSLT, that could tell me how to modify the XSLT below to:
1) Hide the elements other than Items (e.g. ParamStartDate, ParamEndDate, etc.).
2) Output the table with the nested "Items" complex element.
Currently, the xsl below produces each of the elements as column headers, and the Items cell contains all the items on one row. I essentially need to go one level deeper.
<xsl:template match="/">
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<xsl:apply-templates/>
</Workbook>
</xsl:template>
<xsl:template match="/*">
<Worksheet>
<xsl:attribute name="ss:Name">
<xsl:value-of select="local-name(/*/*)"/>
</xsl:attribute>
<Table x:FullColumns="1" x:FullRows="1">
<Row>
<xsl:for-each select="*[position() = 1]/*">
<Cell>
<Data ss:Type="String">
<xsl:value-of select="local-name()"/>
</Data>
</Cell>
</xsl:for-each>
</Row>
<xsl:apply-templates/>
</Table>
</Worksheet>
</xsl:template>
<xsl:template match="/*/*">
<Row>
<xsl:apply-templates/>
</Row>
</xsl:template>
<xsl:template match="/*/*/*">
<Cell>
<Data ss:Type="String">
<xsl:value-of select="."/>
</Data>
</Cell>
</xsl:template>
Desired Excel Output (Only show Items complexType as Table):
ID EmployeeName StaffID .... Issue Activity 1 John Smith 231 .... text text 2 Kate Henderson 101 .... text2 text3 . .... . .... N ....
Current Output:
ParamStartDate ParamEndDate .... ParamPercentRange Items '01/01/2010' '04/01/2010' .... 6 '1John Smith231...texttext....'
As always, any help greatly appreciated.
Thank You
P.S. Alejandro, here's the output with your changes:
<?xml version="1.0" encoding="utf-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="PercentTimeReport">
<Table x:FullColumns="1" x:FullRows="1">
<Row />
</Table>
</Worksheet>
</Workbook>
Here is a sample of my original output:
<?xml version="1.0" encoding="utf-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts">
<Worksheet ss:Name="PercentTimeReport">
<Table x:FullColumns="1" x:FullRows="1">
<Row>
<Cell><Data ss:Type="String">ParamStartDate</Data></Cell><Cell><Data ss:Type="String">ParamEndDate</Data></Cell><Cell><Data ss:Type="String">ParamQuarterInt</Data></Cell><Cell><Data ss:Type="String">ParamPercentRange</Data></Cell><Cell><Data ss:Type="String">Items</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">2010-07-01T00:00:00</Data></Cell><Cell><Data ss:Type="String">2010-09-30T00:00:00</Data></Cell>....</Cell>
</Row>
</Table>
</Worksheet>
</Workbook>