Ich muss das Ergebnis einer Abfrage (XML-Format) in eine Excel-Datei transformieren.XSLT-Transformation nach Excel
Beispiel der Abfrage-Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<dbqueries>
<dbquery id="main">
<rows>
<row user="Me" user-id="1"/>
<row user="Myself" user-id="2"/>
<row user="I" user-id="3"/>
</rows>
</dbquery>
</dbqueries>
Ich benutze das folgende XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<xsl:output method="xml" indent="yes" encoding="UTF-8" />
<xsl:template match="/dbqueries">
<xsl:processing-instruction name="mso-application">
<xsl:text>progid="Excel.Sheet"</xsl:text>
</xsl:processing-instruction>
<Workbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom" />
<Borders />
<Font />
<Interior />
<NumberFormat />
<Protection />
</Style>
<Style ss:ID="s21">
<Font ss:Size="22" ss:Bold="1" />
</Style>
<Style ss:ID="s22">
<Font ss:Size="14" ss:Bold="1" />
</Style>
<Style ss:ID="s23">
<Font ss:Size="12" ss:Bold="1" />
</Style>
<Style ss:ID="s24">
<Font ss:Size="10" ss:Bold="1" />
</Style>
</Styles>
<!-- Write each query -->
<xsl:for-each select="dbquery">
<Worksheet ss:Name="{@id}">
<Table>
<xsl:apply-templates select="//rows" mode="rows" />
</Table>
</Worksheet>
</xsl:for-each>
</Workbook>
</xsl:template>
<xsl:template match="//rows/row" mode="rows">
<xsl:variable name="x" select="position()" />
<Row ss:Index="{$x}">
<Cell ss:Index="1">
<Data ss:Type="String">
<xsl:value-of select="@id" />
</Data>
</Cell>
<Cell ss:Index="2">
<Data ss:Type="String">
<xsl:value-of select="@user" />
</Data>
</Cell>
</Row>
</xsl:template>
Die Umwandlung funktioniert, außer dass das erste Zeichen bei der Konvertierung verloren.
Siehe unten:
Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
Was falsch möglicherweise wird?
Was * erstes Zeichen *? Der Öffnungswinkel? Kein XSLT-Prozessor würde das jemals tun. Könnte helfen, aktuelle und gewünschte Ausgabe zu zeigen. – Parfait
Das Zeichen "<", das der Arbeitsmappe vorausgeht, ist verloren – Soldierflup
Welchen XSLT-Prozessor verwenden Sie? VBAs MSXML? Xalan? Saxon? LibXSLT? – Parfait