XML/XSLT stylesheet/number format
Содержание
- 1 Format a chosen value as number
- 2 Format number after calculation
- 3 number format="001. "
- 4 number format="1. " level="any"
- 5 number format="1. " level="any" from="chapter"
- 6 number format="1. " level="multiple"
- 7 number format="1. " level="multiple" count="chapter|sect1"
- 8 number format="1. " level="multiple" count="chapter|sect1|sect2"
- 9 number level="multiple" format="1. "
- 10 Number style
- 11 Various number formats
Format a chosen value as number
File: Data.xml
<?xml version="1.0" ?>
<tables>
<table>
<table-name>Conference</table-name>
<number-of-legs>4</number-of-legs>
<table-top-material type="laminate">A</table-top-material>
<table-shape>B</table-shape>
<retail-price currency="USD">1485</retail-price>
</table>
</tables>
File: Transform.xslt
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<head>
<title>Three Real Tables</title>
</head>
<body>
<table border="0" cellpadding="10">
<tr>
<th align="left">Name</th>
<th align="left">Shape</th>
<th align="left">Legs</th>
<th align="left">Material</th>
<th align="left">Finish</th>
<th align="left">Price</th>
</tr>
<xsl:apply-templates select="/tables/table">
<xsl:sort select="table-name" />
</xsl:apply-templates>
</table>
<p />
</body>
</html>
</xsl:template>
<xsl:template match="table">
<tr>
<td>
<xsl:value-of select="table-name" />
</td>
<td>
<xsl:value-of select="table-shape" />
</td>
<td>
<xsl:value-of select="number-of-legs" />
</td>
<td>
<xsl:value-of select="table-top-material/@type" />
</td>
<td>
<xsl:value-of select="table-top-material" />
</td>
<td>
<xsl:apply-templates select="retail-price" />
</td>
</tr>
</xsl:template>
<xsl:template match="retail-price">
<div class="tprice">
<xsl:choose>
<xsl:when test="@currency = "USD"">$</xsl:when>
<xsl:when test="@currency = "GBP"">?</xsl:when>
<xsl:when test="@currency = "EURO"">C</xsl:when>
<xsl:when test="@currency = "YEN"">Y</xsl:when>
</xsl:choose>
<xsl:value-of select="format-number(., "#,##0.00")" />
</div>
</xsl:template>
</xsl:stylesheet>
Output:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Three Real Tables</title>
</head>
<body>
<table border="0" cellpadding="10">
<tr>
<th align="left">Name</th>
<th align="left">Shape</th>
<th align="left">Legs</th>
<th align="left">Material</th>
<th align="left">Finish</th>
<th align="left">Price</th>
</tr>
<tr>
<td>Conference</td>
<td>B</td>
<td>4</td>
<td>laminate</td>
<td>A</td>
<td>
<div class="tprice">$1,485.00</div>
</td>
</tr>
</table>
<p></p>
</body>
</html>
Format number after calculation
File: Data.xml
<?xml version="1.0"?>
<products>
<product name="strawberry jam">
<region name="south" sales="20.00" />
<region name="north" sales="50.00" />
</product>
<product name="raspberry jam">
<region name="south" sales="205.16" />
<region name="north" sales="10.50" />
</product>
<product name="plum jam">
<region name="east" sales="320.20" />
<region name="north" sales="39.50" />
</product>
</products>
File: Transform.xslt
<?xml version="1.0"?>
<products xsl:version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:for-each select="products/product">
<xsl:sort select="sum(region/@sales)" order="descending" />
<product name="{@name}"
sales="{format-number(sum(region/@sales), "$####0.00")}" />
</xsl:for-each>
</products>
Output:
<?xml version="1.0" encoding="UTF-8"?><products><product name="plum jam" sales="$359.70"/><product name="raspberry jam" sales="$215.66"/><product name="strawberry jam" sales="$70.00"/></products>
number format="001. "
File: Data.xml
<colors>
<color>red</color>
<color>green</color>
<color>blue</color>
<color>yellow</color>
<color>purple</color>
<color>brown</color>
<color>orange</color>
<color>pink</color>
<color>black</color>
<color>white</color>
<color>gray</color>
</colors>
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="color">
<xsl:number format="001. " />
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Output:
001. red
002. green
003. blue
004. yellow
005. purple
006. brown
007. orange
008. pink
009. black
010. white
011. gray
number format="1. " level="any"
File: Data.xml
<book>
<title>Title of Book</title>
<chapter>
<title>First Chapter</title>
<sect1>
<title>First Section, First Chapter</title>
<figure>
<title>First picture in book</title>
<graphic fileref="pic1.jpg" />
</figure>
</sect1>
</chapter>
</book>
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="figure">
<xsl:number format="1. " level="any" />
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Output:
Title of Book
First Chapter
First Section, First Chapter
1.
First picture in book
number format="1. " level="any" from="chapter"
File: Data.xml
<book>
<title>Title of Book</title>
<chapter>
<title>First Chapter</title>
<sect1>
<title>First Section, First Chapter</title>
<figure>
<title>First picture in book</title>
<graphic fileref="pic1.jpg" />
</figure>
</sect1>
</chapter>
</book>
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="figure">
<xsl:number format="1. " level="any" from="chapter" />
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Output:
Title of Book
First Chapter
First Section, First Chapter
1.
First picture in book
number format="1. " level="multiple"
File: Data.xml
<book>
<title>Title of Book</title>
<chapter>
<title>First Chapter</title>
<sect1>
<title>First Section, First Chapter</title>
<figure>
<title>First picture in book</title>
<graphic fileref="pic1.jpg" />
</figure>
</sect1>
</chapter>
</book>
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="sect1">
<xsl:number format="1. " level="multiple" />
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Output:
Title of Book
First Chapter
1.
First Section, First Chapter
First picture in book
number format="1. " level="multiple" count="chapter|sect1"
File: Data.xml
<book>
<title>Title of Book</title>
<chapter>
<title>First Chapter</title>
<sect1>
<title>First Section, First Chapter</title>
<figure>
<title>First picture in book</title>
<graphic fileref="pic1.jpg" />
</figure>
</sect1>
</chapter>
</book>
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" />
<xsl:template match="sect1">
<xsl:number format="1. " level="multiple" count="chapter|sect1" />
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Title of Book
First Chapter
1.1.
First Section, First Chapter
First picture in book
number format="1. " level="multiple" count="chapter|sect1|sect2"
File: Data.xml
<book>
<title>Title of Book</title>
<chapter>
<title>First Chapter</title>
<sect1>
<title>First Section, First Chapter</title>
<figure>
<title>First picture in book</title>
<graphic fileref="pic1.jpg" />
</figure>
</sect1>
</chapter>
</book>
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="chapter">
<xsl:number format="1. " />
<xsl:apply-templates />
</xsl:template>
<xsl:template match="sect1">
<xsl:number format="1. " level="multiple" count="chapter|sect1" />
<xsl:apply-templates />
</xsl:template>
<xsl:template match="sect2">
<xsl:number format="1. " level="multiple" count="chapter|sect1|sect2" />
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Output:
Title of Book
1.
First Chapter
1.1.
First Section, First Chapter
First picture in book
number level="multiple" format="1. "
File: Data.xml
<colors>
<color>red</color>
<color>green</color>
<color>blue</color>
<color>egg</color>
<color>navy</color>
</colors>
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="color">
<xsl:number level="multiple" format="1. " />
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Output:
1. red
2. green
3. blue
4. egg
5. navy
Number style
File: Data.xml
<?xml version="1.0"?>
<book>
<title>XSLT Topics</title>
<chapter>
<title>XPath</title>
<para>text</para>
</chapter>
<chapter>
<title>Stylesheet Basics</title>
<para>text</para>
</chapter>
<chapter>
<title>Branching and Control Elements</title>
<para>text</para>
</chapter>
<chapter>
<title>Functions</title>
<para>text</para>
</chapter>
</book>
File: Transform.xslt
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="standard-style.xsl" />
<xsl:template match="line">
<xsl:number level="any" format="001" />
  
<xsl:apply-imports />
</xsl:template>
</xsl:stylesheet>
Output:
<?xml version="1.0" encoding="UTF-8"?>
XSLT Topics
XPath
text
Stylesheet Basics
text
Branching and Control Elements
text
Functions
text
Various number formats
File: Data.xml
<colors>
<color>red</color>
<color>green</color>
<color>blue</color>
<color>yellow</color>
</colors>
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="colors">
<xsl:for-each select="color">
<xsl:number format="I. " />
<xsl:value-of select="." />
<xsl:text/>
</xsl:for-each>
<xsl:text>|</xsl:text>
<xsl:for-each select="color">
<xsl:number format="i. " />
<xsl:value-of select="." />
<xsl:text/>
</xsl:for-each>
<xsl:text>|</xsl:text>
<xsl:for-each select="color">
<xsl:number format="A. " />
<xsl:value-of select="." />
<xsl:text/>
</xsl:for-each>
<xsl:text>|</xsl:text>
<xsl:for-each select="color">
<xsl:number format="a. " />
<xsl:value-of select="." />
<xsl:text/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Output:
I. redII. greenIII. blueIV. yellow|i. redii. greeniii. blueiv. yellow|A. redB. greenC. blueD. yellow|a. redb. greenc. blued. yellow