XML Tutorial/XSLT stylesheet/concat

Материал из Web эксперт
Версия от 18:22, 25 мая 2010; (обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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], "&#10;",
                              line[2], "&#10;",
                              "&#32;&#32;&#32;",
                              line[3], "&#10;",
                              "&#32;&#32;&#32;",
                              line[4], "&#10;",
                              line[5], "&#10;",
                              "&#9;&#9;-",
                              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>