[xsl] Transformation of hierarchy, changing levels, and... back

Subject: [xsl] Transformation of hierarchy, changing levels, and... back
From: Marcin Miłkowski <milek_pl@xxxxx>
Date: Tue, 02 Aug 2005 17:13:20 +0200
hi,

I've been trying to make some transformation from a structure:

<Tu>
	<Tuv>
		@Lang
		some text1
		<df>some text2</df>
		<ut>some optional text</ut>
		some text
		<ut>some more text</ut>
		and some text
	</Tuv>
	<Tuv>
		@Lang
		some text
		<df>
		some text
		</df>
		<ut>some optional text</ut>
		some text
		<ut>some more text</ut>
		and some text
	</Tuv>
</Tu>

to a structure

<trans-unit>	(=Tu)
	@id
	<source> (=Tu/Tuv@Lang=$blabla)

		some text1
		<g@id@barfoo/>	(<df>)
		some text2
		<g@id@foobar/>	(</df>)
		<ph@id>some optional text</ph>(=ut)
		some text
		<ph@id>some more text</ut>
		and some text
 	</source>
	
	<target> (=Tu/Tuv@Lang=$foobar)
		some text1
		<g@id@barfoo/>	(<df>)
		some text2
		<g@id@foobar/>	(</df>)
		<ph@id>some optional text</ph>(=ut)
		some text
		<ph@id>some more text</ut>
		and some text
	</target>
</trans-unit>

I tried to match //Tu, and then use for-each to match all Tuv[1]/ut and Tuv[2]/ut. This approach turned quite difficult because I had to insert ut at exactly the same position in source as it was in Tuv[1]. Probably I should use more templates and match //Tu/Tuv or something like that, but I wouldn't know how to close the trans-unit tag (is there a way to check if this Tuv is Tu/Tuv[1] or Tu/Tuv[2]?). Additionally, I would need to produce a second file with ids replacing all text between tags in Tu/Tuv[1]@Lang=foobar and Tu/Tuv[2]@lLang=barfoo. (So the text must be uniquely numbered, or indexed in the other file). The third step would be to backconvert the transformed files into a source one.

Any ideas what method would be the best in this case? All help very appreciated.

Best regards,
	Marcin Milkowski

Current Thread