[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Recursively link XML blocks
Will this do? I took the liberty of creating a sample WF doc from your fragment: <?xml version="1.0"?> <recursivecompose> ... <element_A> textA textA textA <insert>element_B</insert> textA textA textA </element_A> <element_B> textB textB textB <insert>element_C</insert> textB textB textB </element_B> <element_C> textC textC textC textC textC textC </element_C> ....etc. </recursivecompose> Then, assuming I *don't* know exactly what the element structure may be, You may be able to use following:: or another XPath to improve upon the //*, if you can make a guarantee about the element structure. The first apply-templates processes "element_A" explicitly. You could alternatively test for an attribute value, or for the first element child - whatever you know that points to the root of your compositional heirarchy. Note that this puts a steep price on the user, should they fail to avoid a loop in the linking. If, for instance, you <insert> element_C into itself, the XSLT engine may keep recursing until it dies. (Saxon 6.4.3 did.) <?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > <xsl:output method="text"/> <xsl:template match="/*"> <xsl:apply-templates select="element_A" /> </xsl:template> <xsl:template match="insert"> <xsl:apply-templates select="//*[local-name() = current()]"/> </xsl:template> </xsl:stylesheet> Costantino_Sertorio@xxxxxxxxxx wrote: > > Hello everybody, > I am trying (without success, at the moment...) to do the following: > > XML document: > ... > <element_A> > textA textA textA > <insert>element_B</insert> > textA textA textA > </element_A> > > <element_B> > textB textB textB > <insert>element_C</insert> > textB textB textB > </element_B> > > <element_C> > textC textC textC > textC textC textC > </element_C> > ....etc. > > Desired output: > textA textA textA > textB textB textB > textC textC textC > textC textC textC > textB textB textB > textA textA textA > > In other words, I would like to "link" elements to other elements, and compose a > new document "recursively". > This is exactly the same behaviour that I may obtain by changing my "content > architecture", and putting all the text directly in the XSL, and then using > "xsl:call-template"s to include one block in another. > But if I do that I have to mix pure text with layout definitions (I want to > output HTML and FO from the XML) - and therefore I will have to maintain two > sets of documents. > Does anybody have a suggestion? > Thank you very much, > > Costantino > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list -- Mitch.Amiano (@alcatel.com) SW Development Engineer in C++/Java/Perl/TCL/SQL/XML/XSLT/XPath Advance Design Process Group, Raleigh Engineering Services Alcatel USA XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|