XML/XSLT stylesheet/Choose

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

Choose when statement

File: Data.xml
<?xml version="1.0"?>
<Characters>
  <Character age="1">Character 1</Character>
  <Character age="2">Character 2</Character>
  <Character age="3">Character 3</Character>
  <Character age="4">Character 4</Character>
  <Character age="5">Character 5</Character>
</Characters>

File: Transform.xslt
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:template match="/">
    <html>
      <head>
        <title>title</title>
      </head>
      <body>
        <h3>header 3.</h3>
        <xsl:apply-templates select="/Characters/Character" />
      </body>
    </html>
  </xsl:template>
  <xsl:template match="Character">
    <xsl:choose>
      <xsl:when test="@age &gt; 10 ">
        <paragraph>
          <b>
            <xsl:value-of select="." />
          </b>
          age,
          <b>
            <xsl:value-of select="@age" />
          </b>
          .
        </paragraph>
      </xsl:when>
      <xsl:otherwise>
        <paragraph>
          <b>
            <xsl:value-of select="." />
          </b>
          - ok
        </paragraph>
        .
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>
Output:
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>title</title>
   </head>
   <body>
      <h3>header 3.</h3>
      <paragraph><b>Character 1</b>
                   - ok
                 
      </paragraph>
              .
            
      <paragraph><b>Character 2</b>
                   - ok
                 
      </paragraph>
              .
            
      <paragraph><b>Character 3</b>
                   - ok
                 
      </paragraph>
              .
            
      <paragraph><b>Character 4</b>
                   - ok
                 
      </paragraph>
              .
            
      <paragraph><b>Character 5</b>
                   - ok
                 
      </paragraph>
              .
            
   </body>
</html>



when test="position()=last()"

File: Data.xml
<?xml version="1.0" encoding="utf-8"?>
<emailList>
  <head:header xmlns:head="http://www.domain.ru/namespace/header">
    <title>Email List</title>
    <maintainer>Joe</maintainer>
  </head:header>
  <person type="personal" id="p001">
    <name>person1</name>
    <email>p@hotmail.ru</email>
  </person>
  <person type="work" id="p002">
    <name>person2</name>
    <email>p@hotmail.ru</email>
  </person>
  <person type="personal" id="p003">
    <name>person3</name>
    <email>p3@hotmail.ru</email>
  </person>
</emailList>
File: Transform.xslt
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" indent="yes" />
   <xsl:template match="/">
      <xsl:apply-templates select="emailList/person" />
   </xsl:template>
   <xsl:template match="person">
      <xsl:choose>
         <xsl:when test="position()=last()">
         The last entry in your email list is
         <xsl:value-of select="name" />.</xsl:when>
         <xsl:otherwise>
            <div>
            <xsl:value-of select="name" />,
            <xsl:value-of select="email" />
            </div>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
</xsl:stylesheet>
Output:
<div>person1,
   p@hotmail.ru
</div>
<div>person2,
   p@hotmail.ru
</div>
The last entry in your email list is
person3.



xsl:choose, xsl:when and xsl:otherwise

File: Data.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<planner>
  <year value="2002">
    <date month="7" day="15">
      <note time="1430">Appointment</note>
      <note time="1620">Physics class</note>
    </date>
    <date month="7" day="4">
      <note>Independence Day</note>
    </date>
  </year>
</planner>

File: Transform.xslt
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">
  <xsl:output method="xml" omit-xml-declaration="no"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
  <xsl:template match="/">
    <html>
      <head>
        <title>Conditional Processing</title>
      </head>
      <body>
        <p>
          Appointments
          <br />
          <xsl:apply-templates select="planner/year" />
        </p>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="year">
    <strong>Year:</strong>
    <xsl:value-of select="@value" />
    <xsl:for-each select="date/note">
      <xsl:sort select="../@day" order="ascending"
        data-type="number" />
      <strong>
        Day:
        <xsl:value-of select="../@month" />
        /
        <xsl:value-of select="../@day" />
      </strong>
      <xsl:choose>
        <xsl:when
          test="@time &gt; "0500" and @time &lt; "1200"">
          Morning (
          <xsl:value-of select="@time" />
          ):
        </xsl:when>
        <xsl:when
          test="@time &gt; "1200" and @time &lt; "1700"">
          Afternoon (
          <xsl:value-of select="@time" />
          ):
        </xsl:when>
        <xsl:when
          test="@time &gt; "1700" and @time &lt; "2200"">
          Evening (
          <xsl:value-of select="@time" />
          ):
        </xsl:when>
        <xsl:when
          test="@time &gt; "2200" and @time &lt; "500"">
          Night (
          <xsl:value-of select="@time" />
          ):
        </xsl:when>
        <xsl:otherwise>Entire day:</xsl:otherwise>
      </xsl:choose>
      <xsl:value-of select="." />
      <xsl:if test=". = """>n/a</xsl:if>
      <br />
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Conditional Processing</title></head><body><p>
          Appointments
          <br/><strong>Year:</strong>2002<strong>
        Day:
        7
        /
        4</strong>Entire day:Independence Day<br/><strong>
        Day:
        7
        /
        15</strong>
          Afternoon (
          1430
          ):
        Appointment<br/><strong>
        Day:
        7
        /
        15</strong>
          Afternoon (
          1620
          ):
        Physics class<br/></p></body></html>