[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Recursively link XML blocks

Subject: Re: Recursively link XML blocks
From: "Mitch C. Amiano" <Mitch.Amiano@xxxxxxxxxxx>
Date: Mon, 26 Nov 2001 11:16:39 -0500
xsl insert link
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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.