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

Subject: RE: [xsl] Transformation of hierarchy, changing levels, and... back
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 2 Aug 2005 17:24:29 +0100
It looks to me as if what you're trying to describe is 

"group Tuv element by their @Lang value"

So you need to look up Muenchian grouping (or XSLT 2.0 xsl:for-each-group if
you can use 2.0). See http://www.jenitennison.com/xslt/grouping.

But I may have misunderstood your requirement completely - I don't
understand the notations in your problem description.

Michael Kay
http://www.saxonica.com/
 

> -----Original Message-----
> From: Marcin Milkowski [mailto:milek_pl@xxxxx] 
> Sent: 02 August 2005 16:13
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Transformation of hierarchy, changing levels, 
> and... back
> 
> 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