I am. XSLT 1.0 Solution:
This XSLT 1.0 transformation works with any URL without making any assumptions about all the URLs that occupy a common start substring:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://www.w3.org/2005/Atom"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="x:feed/x:id/node()"/> <xsl:template match="x:entry/x:id/text()" name="eatSlashes"> <xsl:param name="pText" select="."/> <xsl:choose> <xsl:when test="not(contains($pText, '/'))"> <xsl:value-of select="$pText"/> </xsl:when> <xsl:otherwise> <xsl:call-template name="eatSlashes"> <xsl:with-param name="pText" select= "substring-after($pText, '/')"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
when applied to the provided XML document :
<feed xmlns="http://www.w3.org/2005/Atom"> <id>http://libx.org/libx2/libapps</id> <entry> <id>http://libx.org/libx2/libapps/2</id> </entry> <entry> <id>http://libx.org/libx2/libapps/3</id> </entry> </feed>
required, the correct result is obtained :
<feed xmlns="http://www.w3.org/2005/Atom"> <id/> <entry> <id>2</id> </entry> <entry> <id>3</id> </entry> </feed>
II. XSLT 2.0 Solution :
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://www.w3.org/2005/Atom"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="x:feed/x:id/node()"/> <xsl:template match="x:entry/x:id/text()"> <xsl:sequence select="tokenize(.,'/')[last()]"/> </xsl:template> </xsl:stylesheet>
when applied to the same XML document (above), the same correct result is obtained :
<feed xmlns="http://www.w3.org/2005/Atom"> <id/> <entry> <id>2</id> </entry> <entry> <id>3</id> </entry> </feed>
source share