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