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

Re: creating top-level elements from within child ele

Subject: Re: creating top-level elements from within child elements
From: RQamar <qamar_rahil@xxxxxxxxxxx>
Date: Tue, 22 Feb 2005 15:15:54 +0000
xml create top level element
If I remember correctly you had

<A1>
 <xsl:apply-templates/>
</A1>

which is an instruction to place the result tree fragment generated by
applying templates as the child of an A1 element.

if you don't want the result to be placed as a child of A1  don't put it
at that point in the stylesheet, place teh A1 element it in the
stylesheet where you want it in the result, as a sibling of A2.



David




Oh Im sorry but this has brought me back to our discussion yesterday where you said that a straight-forward way of making A1 and A2 siblings is to simply write

<A1>
 <xsl:apply-templates/>
</A1>
<A2>
 <xsl:apply-templates/>
</A2>

The problem Im facing with this approach is that I do not want A2 to appear in the output xml file unless some condition in the A1 template is true. This brings me back to the use of a 'flag' boolean variable which will check whether its value is 'true' before creating A2.

However it would be much more efficient to have some feature in XSLT which will allow you to position an element outside the template.

-------------------------------
The code below is for the benefit of Jarno and Omprakash who were confused about my requirement:

The output of my present transformation is of the form



<?xml version="1.0" encoding="UTF-8"?>

<Top>

<PrimeConcept id="10180">
<PrimeName>Car</PrimeName>
<SubConcepts>
    <SubConcept id="10298" name="Toyota"/>
</SubConcepts>
</PrimeConcept>
</Top>



However I want the output in the form



<PrimeConcept id='10180'>Car</PrimeConcept>
<SubConcepts>
<SubConcept id='10298'>Toyota</SubConcept>
</SubConcepts>



I am not sure how you can create the element <SubConcepts> from within the <PrimeConcept> template match. My present code is


<xsl:template match="/">
<Top>
<PrimeConcept><xsl:apply-templates select="Top/TopNode" mode="top"/></PrimeConcept>
</Top>
</xsl:template>




<xsl:template match="TopNode" mode="top">
<xsl:if test="@name = $prime"> <!--e.g. resolves to 'Car'>
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
<xsl:element name="PrimeName"><xsl:value-of select="@name"/></xsl:element><!-- e.g. Car-->
<xsl:if test="following-sibling::TopNode[@name = $constraint] | preceding-sibling::TopNode[@name=$constraint]"> <!--e.g. resolves to 'Toyota'>


<xsl:for-each select="following-sibling::TopNode[@name = $constraint] | preceding-sibling::TopNode[@name=$constraint]"> <!--e.g. resolves to 'Toyota'> <xsl:element name="SubConcepts"> <SubConcept id="{@id}" name="{@name}"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:if>
</xsl:if> </xsl:template>




So how can I create the element <SubConcepts> below <Top> and not <PrimeConcept> ?

-----------------------------------------------------------------------------------


Thanks all for responding. Rahil

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.