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

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


Subject: RE: [xsl] [XSLT 2.0] Using insert-before() to insert a non-atomic value
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Sat, 28 Feb 2004 18:13:18 -0000


# 
# 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.

This creates a new Member element but it also creates a document node as a
parent of that element. You can avoid creating the document node by writing:

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

# 
# 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
# 
You have added a document node into the sequence, not a Member element, and
the document node does not have a child called "Name".

Michael Kay



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords