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