xml mittels xslt aus bestehenden xml erzeugen

chris_head

Mitglied
Hallo,

ich versuche derzeit aus einem bestehenden Xml file, welches Definitionen für alle möglichen Variationen enthält, in ein konkretes XML (also für ein bestimmtes Modell) zu erzeugen.
Dabei kann es mehrere Varianten für ein Model geben bzw. es kann auch eine Variation geben, die für alle Model möglich ist. Es ist ebenfalls möglich, dass es keine Variation für ein Model gibt. In diesem Fall gibt es allerdings mindestens eine Variation für vom Typ "alle".
Bei der Filterung (die mein eigentliches Problem ist) soll die Variation bevorzugt werden, die modelspezifisch ist.

Das "Definitions"-XML sieht (gekürzt) etwa so aus:
HTML:
<Fahrzeug>
	<Model></Model>
	<Bauteil>
		<Name>Rad</Name>		
		<Variation Typ="alle">
			<RadTyp>RadAlle</RadTyp>
		</Variation>	
                <Variation Typ="ABC">
			<RadTyp>RadABC1</RadTyp>
		</Variation>
		<Variation Typ="XYZ">
			<RadTyp>RadXYZ123</RadTyp>
		</Variation>			
	</Bauteil>
	...
</Fahrzeug>

Das Final-XMl sollte so aussehen:
HTML:
<Fahrzeug>
	<Model>ABC</Model>
	<Bauteil>
		<Name>Rad</Name>		
	       <RadTyp>RadABC1</RadTyp>			
	</Bauteil>
	...
</Fahrzeug>

Das hab ich bis jetzt (bestimmt noch ausbaufähig).
HTML:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" version="1.0" encoding="UTF-16" indent="yes"/>
	<xsl:param name="InputFile"/>
	<xsl:param name="Model"/>
	<xsl:variable name="DefDoc" select="document($InputFile)"/>
	
	<xsl:template match="Fahrzeug">
		<xsl:element name="{name()}">
			<xsl:apply-templates/>			
		</xsl:element>
	</xsl:template>
	
	<xsl:template match="Model">
		<Model><xsl:value-of select="$Model"></xsl:value-of></Model>
	</xsl:template>
	
	<xsl:template match="Bauteil">
		<xsl:copy>
			<xsl:apply-templates select="Name"/>
			<xsl:apply-templates select="Variation"/>			
		</xsl:copy>
	</xsl:template>
	
	<xsl:template match="Variation">
		<!-- TODO -->
	</xsl:template>
</xsl:stylesheet>

Ich hab schon mit verschiedene Sachen (u.a. xsl:copy-of) experimentiert, aber bisher nur mit Teilerfolg.
Das Erzeugen/Kopieren der Knoten "Fahrzeug", "Model", "Bauteil" und "Name" krieg ich hin. Nur das Ermitteln der richtigen Variation klappt nicht. :(
Kann mir bitte jemand weiterhelfen?
 
Zuletzt bearbeitet: