File: Data.xml <?xml version="1.0" encoding="US-ASCII"?> <state name="New York"> <county>Bristol</county> <county>Kent</county> <county>Newport</county> <county>Providence</county> <county>Washington</county> </state> File: Transform.xslt <?xml version="1.0" encoding="US-ASCII"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" /> <xsl:template match="/"> <county state="{state/@name}"> <xsl:apply-templates select="state" /> </county> </xsl:template> <xsl:template match="state"> <xsl:apply-templates select="county" /> </xsl:template> <xsl:template match="county[starts-with(.,'K')]"> <first-match> <xsl:apply-templates /> </first-match> </xsl:template> <xsl:template match="county[2]"> <last-match> <xsl:apply-templates /> </last-match> </xsl:template> <xsl:template match="county"> <name> <xsl:apply-templates /> </name> </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?> <county state="New York"> <name>Bristol</name> <last-match>Kent</last-match> <name>Newport</name> <name>Providence</name> <name>Washington</name> </county>