Moin,
ich habe ein XML
und möchte dies in ein anderes XML transformieren, das ähnlich dem folgenden Muster sein soll
Mein bisheriges XSL sieht so aus:
Als Resultat erhalte ich
Primär irritiert mich, warum das database-Element geschlossen wird. Ich dachte, daß ich verschachtelte Elemente erzeugen kann, wenn ich xsl:apply-templates innerhalb des Elementes aufrufe. Ich könnte das Problem sicherlich übergehen, indem ich die Elemente und Attribute als Textstrings zusammensetze, fände es aber schöner (und logischer), wenn ich es mit den vorgesehenen XSL-Funktionen erreichen könnte.
Worin liegt mein Denkfehler?
ich habe ein XML
Code:
<?xml version="1.0" encoding="UTF-8"?> <config> <in>c:\temp\workbook.xlsx</in> <references> <reference> <worksheet>Sheet1</worksheet> </reference> <reference> <worksheet>Sheet 2</worksheet> </reference> <reference> <worksheet>Sheet1</worksheet> <range>A2</range> </reference> <reference> <worksheet>Sheet1</worksheet> <range mode="R1C1">R2C1</range> </reference> <reference> <worksheet>Sheet 2</worksheet> <range>A2</range> </reference> <reference> <worksheet>Sheet 2</worksheet> <range mode="R1C1">R2C1</range> </reference> <reference> <worksheet>Sheet1</worksheet> <range>A1:B2</range> </reference> <reference> <worksheet>Sheet1</worksheet> <range mode="R1C1">R1C1:R2C2</range> </reference> <reference> <worksheet>Sheet 2</worksheet> <range>A1:B2</range> </reference> <reference> <worksheet>Sheet 2</worksheet> <range mode="R1C1">R1C1:R2C2</range> </reference> <reference> <name>Table2</name> </reference> <reference> <table>Table</table> <name>Name</name> </reference> <reference> <table>Table</table> <name>Code:Name</name> </reference> <reference> <table>Table</table> <name>#All</name> </reference> <reference> <table>Table</table> <name>#Data</name> </reference> <reference> <table>Table</table> <name>#Headers</name> </reference> <reference> <table>Table</table> <name>#Totals</name> </reference> <reference>Table[[ID],[#All]]</reference> </references> <out>x:\output\data.xml</out> </config>
Code:
<?xml version="1.0" encoding="UTF-8"?> <database name="Test.xlsx"> <table name="Table One"> <list name="ID"> <item>1</item> <item>2</item> <item>3</item> </list> <list name="Code"> <item>A</item> <item>B</item> <item>C</item> </list> <list name="Name"> <item>Angola</item> <item>Barbeidos</item> <item>Chile</item> </list> </table> <table name="Table Two"> <list name="ID"> <item>4</item> <item>5</item> <item>6</item> </list> <list name="Code"> <item>D</item> <item>E</item> <item>F</item> </list> <list name="Name"> <item>Duffy</item> <item>Elisa</item> <item>Fred</item> </list> </table> <table name="Table Two"> <list name="ID"> <item>7</item> <item>8</item> <item>9</item> </list> <list name="Code"> <item>G</item> <item>H</item> <item>I</item> </list> <list name="Name"> <item>Germanium</item> <item>Halogen</item> <item>Iridium</item> </list> </table> </database>
Code:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:output method="xml" encoding="utf-8" indent="yes"/> <xsl:variable name="Workbook" select="xl/workbook.xml"/> <xsl:template match="config"> <xsl:apply-templates/> </xsl:template> <xsl:template match="in"> <xsl:element name="database"> <xsl:attribute name="name"> <xsl:value-of select="."/> </xsl:attribute> <xsl:apply-templates select="references"/> </xsl:element> </xsl:template> <xsl:template match="references"> <xsl:apply-templates select="reference"/> </xsl:template> <xsl:template match="reference"> <xsl:element name="table"> <xsl:attribute name="name">NAME</xsl:attribute> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="worksheet"> </xsl:template> <xsl:template match="table"> </xsl:template> <xsl:template match="range"> </xsl:template> <xsl:template match="name"> </xsl:template> <xsl:template match="out"> <!-- ... --> </xsl:template> </xsl:stylesheet>
Code:
<?xml version="1.0" encoding="utf-8"?> <database name="c:\temp\workbook.xlsx"/> <table name="NAME"> </table> <table name="NAME"> </table> <!-- usw -->
Worin liegt mein Denkfehler?
Comment