Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Handing dataset type from XML to Xls for Excel
Message
 
À
01/05/2006 18:45:16
Information générale
Forum:
ASP.NET
Catégorie:
XML
Divers
Thread ID:
01118226
Message ID:
01118242
Vues:
13
This message has been marked as the solution to the initial question of the thread.
Hi Michel,

Since you have the XSD Schema along with the XML document, you can make your Xsl transformation smart enough to infer what is the type of the element it is processing at any given time. This way you can test for each type individually and format the resulting XML document accordingly.

This example shows how these tests can be made for the types xs:decimal and xs:string
<xsl:stylesheet version="1.0"
	xmlns="urn:schemas-microsoft-com:office:spreadsheet"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
	xmlns:user="urn:my-scripts"
	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:xs="http://www.w3.org/2001/XMLSchema" >

	<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>
			<xsl:choose>
				<xsl:when test="//xs:element[ @name = local-name(current()) ]/@type = 'xs:decimal'">
					<Data ss:Type="Number">
						<xsl:value-of select="."/>
					</Data>
				</xsl:when>
				<xsl:when test="//xs:element[ @name = local-name(current()) ]/@type = 'xs:string'">
					<Data ss:Type="String">
						<xsl:value-of select="."/>
					</Data>
				</xsl:when>
			</xsl:choose>
		</Cell>
	</xsl:template>


</xsl:stylesheet>
-----
Fabio Vazquez
http://www.fabiovazquez.com
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform