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

[XSLT 2.0] Using insert-before() to insert a non-atomi

Subject: [XSLT 2.0] Using insert-before() to insert a non-atomic value
From: "Roger L. Costello" <costello@xxxxxxxxx>
Date: Fri, 27 Feb 2004 17:12:15 -0500
xslt insert node
Hi Folks,

I have two questions regarding using the insert-before function to
insert a node into a sequence of nodes: 

Consider this XML document:

<?xml version="1.0"?>
<FitnessCenter>
        <Member level="platinum">
                <Name>Jeff</Name>
                <Phone>555-1234</Phone>
                <FavoriteColor>lightgrey</FavoriteColor>
        </Member>
        <Member level="gold">
                <Name>David</Name>
                <Phone>383-1234</Phone>
                <FavoriteColor>lightblue</FavoriteColor>
        </Member>
        <Member level="platinum">
                <Name>Roger</Name>
                <Phone>888-1234</Phone>
                <FavoriteColor>lightyellow</FavoriteColor>
        </Member>
</FitnessCenter>

Here I create a variable to hold the sequence of Members:

<xsl:variable name="members" select="/FitnessCenter/Member"/>

Here I iterate through the Members and print out their Names:

<xsl:for-each select="$members">
       <xsl:value-of select="Name"/>
       <xsl:text> </xsl:text>
</xsl:for-each>

Output: Jeff David Roger

Now I would like to insert into the member sequence a new member.  Here
I create a variable containing the new member:

<xsl:variable name="new-member">
    <Member level="platinum">
        <Name>Sally</Name>
        <Phone>444-1234</Phone>
        <FavoriteColor>green</FavoriteColor>
    </Member>
</xsl:variable>

Question #1: Is this the correct approach to creating a new Member?  I
suspect not, but I don't know how else to do it.

Now, using the insert-before function, I would like to insert this new
member before the second Member:

<xsl:variable name="members-plus-new-member"
              select="insert-before($members,2,$new-member)"/>

Lastly, I would like to print the Name of each Member in the new
sequence:

<xsl:for-each select="$members-plus-new-member">
       <xsl:value-of select="Name"/>
       <xsl:text> </xsl:text>
</xsl:for-each>

The output that I get is not what I desire:

Output: Jeff David Roger

Note that Sally is missing.

Question #2: What am I doing wrong?  Obviously, I am not understanding
something fundamental about sequences in XSLT 2.0.  Any clarity on this
topic would be greatly appreciated.  /Roger


 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.