Subject: RE: [xsl] Moving an element to a new location in the Result-tree From: "Graves, Jim \(CONTR\)" <jim.graves@xxxxxxx> Date: Wed, 7 Sep 2005 17:21:40 -0700 |
Yes, I'm probably am thinking in a procedural manner, more than 50%/time. Please let me clarify my problem with more details: Let's suppose my source document looks like this: (note: repeating "b1" elements) Source Tree: <document1> <a/> <b1/> <b1data1>XYZ1</b1data1> <b1data2>XYZ2</b1data2> </b1> <b1> <b1data1>ABC1</b1data1> <b1data2>ABC2</b1data2> </b1> <b1> <b1data1>PDQ1</b1data1> <b1data2>PDQ2</b1data2> </b1> <c/> <d/> <e/> </document1> I want to move the former "b1" elements down the tree and re-name them (all) along the way, yet maintain the actual data they contain ("XYZ1", etc.). The main thing is to move them down there, not re-name them. The reason is that the XML file must conform to a schema that expects the "b1" elements to be down there (after the "e" element) not between the "a" and "b" elements. The XSLT processor follows the linear sequence, yet I need it to 'skip ahead' and put the "b1" elements into a part of the result tree that does not yet exist -- hence, the second transform is needed (or is it). What method works best? Result Tree: <document222> <a/> <c/> <d/> <e/> <new_name_for_b1/> <b1data1>XYZ1</b1data1> <b1data2>XYZ2</b1data2> </ new_name_for_b1> < new_name_for_b1> <b1data1>ABC1</b1data1> <b1data2>ABC2</b1data2> </ new_name_for_b1> <new_name_for_b1> <b1data1>PDQ1</b1data1> <b1data2>PDQ2</b1data2> </new_name_for_b1> </document222> Ideas? ~Jim -----Original Message----- From: Christopher R. Maden [mailto:crism@xxxxxxxxx] Sent: Wednesday, 07 September 2005 16:54 To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Moving an element to a new location in the Result-tree Contra Jim Graves writes: > What is the recommended method to move an element to a Result-tree > location that will be created, yet has not yet been created, (using > copy, & copy-of)? Common sense would indicate that I need to run a > second XSLT transform -- once the first version of the tree has been > created -- or is there a better way, such as building the tree's > elements first, then populating them with data, in a following template > in the first and only transform? Since I usually build the element and > populate it then too, when I'm there, I think I'll need a second XSLT. I think you may be falling prey to the same procedural trap discussed earlier today on this list. If I have this input tree: <document> <a/> <b/> </document> and I want to put a inside of b, I can do this: <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="a"/> <xsl:template match="b"> <xsl:copy> <xsl:apply-templates select="../a" mode="inside"/> </xsl:copy> </xsl:template> <xsl:template match="a" mode="inside"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> which results in: <document> <b><a/></b> </document> ~Chris -- Christopher R. Maden, Principal Consultant, crism consulting XML-SGML-HTML-DTDs-schemas-XSL-DSSSL-conversion-training-ebooks-B2B <URL: http://crism.maden.org/consulting/ > PGP Fingerprint: BBA6 4085 DED0 E176 D6D4 5DFC AC52 F825 AFEC 58DA
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Moving an element to a ne, David Carlisle | Thread | RE: [xsl] Moving an element to a ne, Christopher R. Maden |
RE: [xsl] Apply-templates - how to , Mike Schinkel | Date | RE: [xsl] Apply-templates - how to , Mike Schinkel |
Month |