split string in xsl for content with /
I have some content being pulled in from an external xml with xsl. In the xml the title is merged with the author with a backslash separating them.
How do I separate the title and author in xsl so that I can have them with different tags
<product>
<开发者_如何学Go;title>The Maze / Jane Evans</title>
</product>
to be
<h2>The Maze</h2>
<p>Jane Evans</p>
Hope this helps! Let me know if I misinterpreted the question!
<xsl:variable name="title">
<xsl:value-of select="/product/title"/>
</xsl:variable>
<xsl:template match="/">
<xsl:choose>
<!--create new elements from existing text-->
<xsl:when test="contains($title, '/')">
<xsl:element name="h2">
<xsl:value-of select="substring-before($title, '/')"/>
</xsl:element>
<xsl:element name="p">
<xsl:value-of select="substring-after($title, '/')"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<!--no '/' deliminator exists-->
<xsl:value-of select="$title"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
This transformation:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="title[contains(., '/')]">
<h2>
<xsl:value-of select="substring-before(., '/')"/>
</h2>
<p>
<xsl:value-of select="substring-after(., '/')"/>
</p>
</xsl:template>
<xsl:template match="title">
<h2><xsl:value-of select="."/></h2>
</xsl:template>
</xsl:stylesheet>
when applied on the provided XML document:
<product>
<title>The Maze / Jane Evans</title>
</product>
produces the wanted result:
<h2>The Maze </h2>
<p> Jane Evans</p>
Do note that no explicit conditional code is used -- the XSLT processor does this work itself.
I had written a template which does just that.
Lav G
精彩评论