XML Tutorial/XSLT stylesheet/concat
Содержание
concat function
File: Data.xml
<?xml version = "1.0"?>
<stocks>
<stock symbol = "INTC">
<name>Intel Corporation</name>
</stock>
<stock symbol = "CSCO">
<name>Cisco Systems, Inc.</name>
</stock>
</stocks>
File: Transform.xslt
<?xml version = "1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/stocks">
<html>
<body>
<ul>
<xsl:for-each select="stock">
<xsl:if test="starts-with(@symbol, "C")">
<li>
<xsl:value-of select="concat(@symbol," - ", name)" />
</li>
</xsl:if>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Output:
<html>
<body>
<ul>
<li>CSCO - Cisco Systems, Inc.</li>
</ul>
</body>
</html>
Concat string together
File: Data.xml
<?xml version="1.0" encoding="UTF-8"?>
<poem>
<line>line 1</line>
<line>line 2</line>
<line>line 3</line>
<attribution>A</attribution>
</poem>
File: Transform.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="poem">
<xsl:value-of
select="concat(line[1], " ",
line[2], " ",
"   ",
line[3], " ",
"   ",
line[4], " ",
line[5], " ",
"		-",
attribution)" />
</xsl:template>
</xsl:stylesheet>
Output:
line 1
line 2
line 3
-A
Function concat() can stick several strings together
File: Data.xml
<?xml version="1.0" encoding="utf-8"?>
<data>
<user firstName="John" surname="Smith"/>
<user firstName="Joe" surname="Smith"/>
<user firstName="Charles" surname="Smith"/>
</data>
File: Transform.xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="//user">
<Paragraph>
<xsl:value-of select="concat(@firstName," ",@surname)"/>
</Paragraph>
</xsl:template>
</xsl:stylesheet>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<Paragraph>John Smith</Paragraph>
<Paragraph>Joe Smith</Paragraph>
<Paragraph>Charles Smith</Paragraph>
select=concat(The second album is , list/listitem[2])
File: Data.xml
<?xml version="1.0"?>
<!-- albums.xml -->
<list xml:lang="en">
<title>title 1</title>
<listitem>item 1</listitem>
<listitem>item 2</listitem>
<listitem>item 3</listitem>
<listitem xml:lang="sw">item 4</listitem>
<listitem xml:lang="en-gb">item 5</listitem>
<listitem xml:lang="zu">item 6</listitem>
<listitem xml:lang="jz">item 7</listitem>
</list>
File: Transform.xslt
<?xml version="1.0"?>
<!-- comment2.xsl -->
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title>XSLT and CSS Demo</title>
<style>
<xsl:comment>
p.big {font-size: 125%; font-weight: bold;}
p.odd {color: purple; font-weight: bold;}
p.even {color: blue; font-style: italic; font-weight: bold;}
</xsl:comment>
</style>
</head>
<body style="font-family: sans-serif;">
<xsl:apply-templates select="list/title"/>
<xsl:comment
select="concat("The second album is ", list/listitem[2])"/>
<xsl:apply-templates select="list/listitem"/>
</body>
</html>
</xsl:template>
<xsl:template match="title">
<p class="big"><xsl:value-of select="."/></p>
</xsl:template>
<xsl:template match="listitem">
<xsl:choose>
<xsl:when test="position() mod 2">
<p class="odd"><xsl:value-of select="."/></p>
</xsl:when>
<xsl:otherwise>
<p class="even"><xsl:value-of select="."/></p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Output:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>XSLT and CSS Demo</title><style>
<!--
p.big {font-size: 125%; font-weight: bold;}
p.odd {color: purple; font-weight: bold;}
p.even {color: blue; font-style: italic; font-weight: bold;}
--></style></head>
<body style="font-family: sans-serif;">
<p class="big">title 1</p>
<!--The second album is item 2-->
<p class="odd">item 1</p>
<p class="even">item 2</p>
<p class="odd">item 3</p>
<p class="even">item 4</p>
<p class="odd">item 5</p>
<p class="even">item 6</p>
<p class="odd">item 7</p>
</body>
</html>
The concat function returns the concatenation of its arguments.
File: Data.xml
<?xml version="1.0" encoding="utf-8"?>
<data>
<text>Start</text>
<text>Body</text>
<text>Finish</text>
</data>
File: Transform.xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="T" select="concat(//text[1]," - ",//text[2]," - ",//text[3])"/>
<xsl:template match="/">
<Paragraph>
<xsl:value-of select="$T"/>
</Paragraph>
</xsl:template>
</xsl:stylesheet>
Output:
<?xml version="1.0" encoding="UTF-8"?><Paragraph>Start - Body - Finish</Paragraph>