[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] [XSLT 2.0] Using insert-before() to insert a non-atomic value


Subject: [xsl] [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

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
Keywords