gebruik van templates in xsl

Status
Niet open voor verdere reacties.

gast0512

Gebruiker
Lid geworden
31 mei 2005
Berichten
182
een stuk wat ik binnen krijg:
Code:
<CoreExchange>
<Node>

....nog meer node specifieke gegevens ....

<Properties>

....nog meer node specifieke gegevens ....

<Descriptions>
<Description language="NL">tekst</Description>
</Descriptions>

....nog meer node specifieke gegevens ....

<Comforts>
<Comfort language="NL" >
<ComfortType>tekst</ComfortType>
<Value>tekst</Value></Comfort>
</Comforts>

....nog meer node specifieke gegevens ....

</Properties>

....nog meer node specifieke gegevens ....

</Node>

... nog meer nodes....
</CoreExchange>

misschien belangrijk hierbij: er kan voor elke language maar 1 description zijn, er kunnen voor elke language meerdere comforts zijn, ik weet vooraf niet welke languages er aanwezig zullen zijn, dit kan varieren. aan dit model kan niets gewijzigd worden, dit is wat ik binnen krijg

adhv een xslt zou ik tot een ander formaat moeten komen waarbij de descriptions naast de description tekst uit de input (wat hierboven staat dus) ook alle comforten (Value) voor dezelfde language binnen de description tag opneemt)

de xslt die ik geschreven heb:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
	version="1.0" 
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:xhtml="http://www.w3.org/1999/xhtml"
	xmlns:exslt="http://exslt.org/common"
	xmlns:dyn="http://exslt.org/dynamic"
	extension-element-prefixes="exslt dyn">

	<xsl:output 
		method="xml"
		version="1.0"
		omit-xml-declaration="no"
		encoding="UTF-8"
		standalone="yes"
		indent="yes"
		media-type="text/xml"/>

	<xsl:template match="/">
		<xsl:element name="CoreExchange">
			<xsl:for-each select="CoreExchange/Node">
				<xsl:element name="Node">
					<xsl:element name="properties">
						<xsl:element name="descriptions">
							<xsl:for-each select="Properties/Descriptions/Description">
								<xsl:element name="description">
									<xsl:attribute name="language">
										<xsl:value-of select="@language" />
									</xsl:attribute>
									<xsl:value-of select="." />

									<xsl:call-template name="getComforts">
										<xsl:with-param name="lang"><xsl:value-of select="@language" /></xsl:with-param>
									</xsl:call-template>
									
								</xsl:element>
							</xsl:for-each>
						</xsl:element>
					</xsl:element>

</xsl:element>
			</xsl:for-each>
		</xsl:element>
	</xsl:template>
	
	
	<xsl:template name="getComforts" match="Properties">
		<xsl:param name="lang" />
		<xsl:value-of select="$lang" />
		<xsl:for-each select="Comforts/Comfort[@language=$lang]">
			<xsl:value-of select="Value" />
		</xsl:for-each>
	</xsl:template>
	
</xsl:stylesheet>

hoe ik geredeneerd heb: ik geef de language mee naar een template , en daar ga ik alle comforts overlopen op basis van de meegegeven language de Value outputten. die value-of die onder param staat in de template werkt perfect, hij gaat effectief de waarde van $lang toevoegen aan de description, dit was puur als test bedoeld, om te zien of hij wel in de template terecht komt, echter, ik krijg nooit de value waarden van de comforts bij mijn descriptions. heeft volgens mij te maken met de match van de template (de rest van mijn xslt werkt perfect), maar ik heb geen ervaring genoeg met xslt om dit te kunnen oplossen, ik probeer maar wat, maar deze keer kom ik er niet,... iemand suggesties?

extra note: input tags hebben allemaal hoofdletters, output tags niet, daar kan ik ook niet van afwijken, ik moet een bepaald formaat afleveren waaraan ik me moet houden
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan