XML/XSLT stylesheet/contains
contains function
File: Data.xml
<poem>
<verse>line 1</verse>
<verse>
line 2
</verse>
</poem>
File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
<xsl:template match="verse">
<xsl:value-of select="concat("length: ",string-length(.))" />
<xsl:if test="contains(.,"light")">
<xsl:text>light: yes!</xsl:text>
</xsl:if>
<xsl:if test="starts-with(.,"Seest")">
<xsl:text>Yes, starts with "Seest"</xsl:text>
</xsl:if>
<xsl:value-of select="normalize-space(.)" />
<xsl:value-of select="translate(.,"abcde","ABCD")" />
</xsl:template>
</xsl:stylesheet>
Output:
length: 6line 1lin 1
length: 13line 2
lin 2
match element with certain value
File: Data.xml
<story>
<chapter>
<title>Chapter 1</title>
<para>para 1</para>
</chapter>
<chapter>
<title>Chapter 2</title>
<para>item 1</para>
<para>item 2</para>
<sect>
<title>Chapter 2, Section 1</title>
<para>item 3</para>
<para>para 2</para>
</sect>
</chapter>
<chapter>
<title>Chapter 3</title>
<para>para A</para>
</chapter>
</story>
File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" />
<xsl:template match="chapter[contains(.,"the")]">
*** This chapter has "the" in it: ***
<xsl:apply-templates />
</xsl:template>
<xsl:template match="chapter">
*** This chapter element not processed by other template: ***
<xsl:apply-templates />
</xsl:template>
<xsl:template match="title" />
</xsl:stylesheet>
Output:
*** This para element not processed by other template: ***
para 1
*** This para element not processed by other template: ***
item 1
*** This para element not processed by other template: ***
item 2
*** This para element not processed by other template: ***
item 3
*** This para element not processed by other template: ***
para 2
*** This para element not processed by other template: ***
para A
template match="para[contains(.,"the")]"
File: Data.xml
<story>
<chapter>
<title>Chapter 1</title>
<para>para 1</para>
</chapter>
<chapter>
<title>Chapter 2</title>
<para>item 1</para>
<para>item 2</para>
<sect>
<title>Chapter 2, Section 1</title>
<para>item 3</para>
<para>para 2</para>
</sect>
</chapter>
<chapter>
<title>Chapter 3</title>
<para>para A</para>
</chapter>
</story>
File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" />
<xsl:template match="para[contains(.,"the")]">
*** This para has "the" in it: ***
<xsl:apply-templates />
</xsl:template>
<xsl:template match="para">
*** This para element not processed by other template: ***
<xsl:apply-templates />
</xsl:template>
<xsl:template match="title" />
</xsl:stylesheet>
Output:
*** This para element not processed by other template: ***
para 1
*** This para element not processed by other template: ***
item 1
*** This para element not processed by other template: ***
item 2
*** This para element not processed by other template: ***
item 3
*** This para element not processed by other template: ***
para 2
*** This para element not processed by other template: ***
para A