XML/XSLT stylesheet/position

Материал из Web эксперт
Перейти к: навигация, поиск

Get the context position with position() function

File: Data.xml
<?xml version="1.0" encoding="utf-8"?>
<Book>
  <Chapter number="c1">the first chapter</Chapter>
  <Chapter number="c2">the second chapter</Chapter>
  <Chapter number="c3">the third chapter</Chapter>
  <Chapter number="c4">the fourth chapter</Chapter>
  <Chapter number="c5">the fifth chapter</Chapter>
</Book>
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="Chapter">
    <xsl:if test="position()=2">
      <paragraph>
        the context position is
        <xsl:value-of select="position()" />
      </paragraph>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>
Output:
<?xml version="1.0" encoding="UTF-8"?>
  <paragraph>
        the context position is
        2</paragraph>



If statement and position(), last() functions

File: Data.xml
<?xml version="1.0"?>
<Book>
  <Title>this is the title</Title>
  <Authors>
    <Author>A</Author>
    <Author>B</Author>
    <Author>C</Author>
  </Authors>
  <Year>2007</Year>
  <Chapters>
    <Chapter number="1" title="title 1">chapter 1</Chapter>
    <Chapter number="2" title="title 2">chapter 2</Chapter>
    <Chapter number="3" title="title 3">chapter 3</Chapter>
    <Chapter number="4" title="title 4">chapter 4</Chapter>
    <Chapter number="5" title="title 5">chapter 5</Chapter>
  </Chapters>
</Book>

File: Transform.xslt
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:template match="Author">
    <xsl:value-of select="." />
    <xsl:if test="position() != last()">
      <xsl:text>, </xsl:text>
    </xsl:if>
    <xsl:if test="position() = last()-1">
      <xsl:text>and </xsl:text>
    </xsl:if>
    <xsl:if test="position() = last()">
      <xsl:text>.</xsl:text>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

Output:
<?xml version="1.0" encoding="UTF-8"?>
  this is the title
  
    A, 
    B, 
    C, and 
  
  2007
  
    chapter 1
    chapter 2
    chapter 3
    chapter 4
    chapter 5



position() function

File: Data.xml
<?xml version="1.0" encoding="UTF-8"?>
<provinces>
 <name>Alberta</name>
 <name>British Columbia</name>
 <name>Manitoba</name>
 <name>New Brunswick</name>
 <name>Newfoundland and Labrador</name>
 <name>Northwest Territories</name>
 <name>Nova Scotia</name>
 <name>Nunavut</name>
 <name>Ontario</name>
 <name>Prince Edward Island</name>
 <name>Quebec</name>
 <name>Saskatchewan</name>
 <name>Yukon</name>
</provinces>

File: Transform.xslt
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" />
  <xsl:template match="provinces">
    <xsl:apply-templates select="name" />
  </xsl:template>
  <xsl:template match="name">
    <xsl:value-of select="position()" />
    <xsl:text>. </xsl:text>
    <xsl:value-of select="." />
    <xsl:text>&#10;</xsl:text>
  </xsl:template>
</xsl:stylesheet>
Output:
1. Alberta
2. British Columbia
3. Manitoba
4. New Brunswick
5. Newfoundland and Labrador
6. Northwest Territories
7. Nova Scotia
8. Nunavut
9. Ontario
10. Prince Edward Island
11. Quebec
12. Saskatchewan
13. Yukon