The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:set="http://exslt.org/sets" >
<!-- Test set:intersection, difference -->
<xsl:variable name="i" select="//city[contains(@name,'i')]"/>
<xsl:variable name="e" select="//city[contains(@name,'e')]"/>
<xsl:template match="/">
<out>
Containing i and e:
<xsl:for-each select="set:intersection($i, $e)">
<xsl:value-of select="@name"/>;
</xsl:for-each>
Containing i and no e:
<xsl:for-each select="set:difference($i, $e)">
<xsl:value-of select="@name"/>;
</xsl:for-each>
Containing e and no i:
<xsl:for-each select="set:difference($e, $i)">
<xsl:value-of select="@name"/>;
</xsl:for-each>
<!-- test intersection and difference on empty sets -->
Containing i:
<xsl:for-each select="set:difference($i, /..)">
<xsl:value-of select="@name"/>;
</xsl:for-each>
Empty set:
<xsl:for-each select="set:intersection($i, /..)">
<xsl:value-of select="@name"/>;
</xsl:for-each>
Empty set:
<xsl:for-each select="set:intersection(/.., $i)">
<xsl:value-of select="@name"/>;
</xsl:for-each>
Empty set:
<xsl:for-each select="set:difference(/.., $i)">
<xsl:value-of select="@name"/>;
</xsl:for-each>
</out>
</xsl:template>
</xsl:stylesheet>