У меня есть следующая XML-схема:
<?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>
и я хотел бы создать файл Excel, который показывает только таблицу элементов в веб-приложении ASP.NET 2.0. Я действительно не понимаю этот код, который я нашел (см. Ниже), или XSLT, достаточный для получения нужного мне формата вывода. Кто-нибудь знает XSLT, который может сказать мне, как изменить XSLT ниже:
1) Скрыть элементы, отличные от Items (например, ParamStartDate, ParamEndDate и т. Д.).
2) Вывести таблицу с вложенным комплексным элементом "Items".
В настоящее время xsl ниже производит каждый из элементов как заголовки столбцов, а ячейка Items содержит все элементы в одной строке. По сути, мне нужно пойти на один уровень глубже.
<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>
Требуемый вывод в Excel (Отображать только элементы complexType как таблицу):
ID EmployeeName StaffID .... Issue Activity
1 John Smith 231 .... text text
2 Kate Henderson 101 .... text2 text3
. ....
. ....
N ....
Токовый выход:
ParamStartDate ParamEndDate .... ParamPercentRange Items
'01/01/2010' '04/01/2010' .... 6 '1John Smith231...texttext....'
Как всегда, любая помощь очень ценится.
Спасибо
P.S. Алехандро, вот вывод с вашими изменениями:
<?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>
Вот пример моего оригинального вывода:
<?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>