XML Tutorial/XSLT stylesheet/number format

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

format-number(123456.9999, "#,###.##", "us_default") : 123,457

   <source lang="xml">

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:decimal-format decimal-separator="," grouping-separator="."/>
 <xsl:decimal-format name="us_default"/>
 <xsl:decimal-format name="other_options" NaN="[not a number]" infinity="unfathomably huge"/>
 <xsl:decimal-format name="hash_mark" digit="!"/>
 <xsl:template match="/">
   <xsl:text>format-number(123456.9999, "#,###.##", "us_default") : </xsl:text>
   <xsl:value-of select="format-number(123456.9999, "#,###.##", "us_default")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(123456.9999, "#,###.##", "us_default") : 123,457</source>


format-number(1528.3, "#/###:00", "f1")

   <source lang="xml">

File: Transform.xslt <?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:decimal-format name="f1"   decimal-separator=":"           grouping-separator="/"/>
 <xsl:decimal-format name="f2"   infinity="Really, really big"   NaN="[not a number]"/>
 <xsl:template match="/">
   <xsl:text>format-number(1528.3, "#/###:00", "f1")=</xsl:text>
   <xsl:value-of select="format-number(1528.3, "#/###:00;-#/###:00", "f1")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(1528.3, "#/###:00", "f1")=1/528:30</source>


format-number(1 div 0, "###,###.00", "f2")

   <source lang="xml">

File: Transform.xslt <?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:decimal-format name="f1"   decimal-separator=":"           grouping-separator="/"/>
 <xsl:decimal-format name="f2"   infinity="Really, really big"   NaN="[not a number]"/>
 <xsl:template match="/">
   
   <xsl:text>format-number(1 div 0, "###,###.00", "f2")=</xsl:text>
   <xsl:value-of select="format-number(1 div 0, "###,###.00", "f2")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(1 div 0, "###,###.00", "f2")=Really, really big</source>


format-number(42, "#!","hash_mark")

   <source lang="xml">

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:decimal-format decimal-separator="," grouping-separator="."/>
 <xsl:decimal-format name="us_default"/>
 <xsl:decimal-format name="other_options" NaN="[not a number]" infinity="unfathomably huge"/>
 <xsl:decimal-format name="hash_mark" digit="!"/>
 <xsl:template match="/">
   <xsl:text>format-number(42, "#!","hash_mark") : </xsl:text>
   <xsl:value-of select="format-number(42, "#!", "hash_mark")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(42, "#!","hash_mark") : #42</source>


format-number(999999999.9999, "#.###,##")

   <source lang="xml">

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:decimal-format decimal-separator="," grouping-separator="."/>
 <xsl:decimal-format name="us_default"/>
 <xsl:decimal-format name="other_options" NaN="[not a number]" infinity="unfathomably huge"/>
 <xsl:decimal-format name="hash_mark" digit="!"/>
 <xsl:template match="/">
   <xsl:text>format-number(999999999.9999, "#.###,##") : </xsl:text>
   <xsl:value-of select="format-number(999999999.9999, "#.###,##")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(999999999.9999, "#.###,##") : 1.000.000.000</source>


format number after calculation

   <source lang="xml">

File: Data.xml <?xml version="1.0"?> <catalog>

<item id="SC-0001">
 <maker>A</maker>
 <description>B</description>
 <size>L</size>
 <price>120.00</price>
 <currency>USD</currency>
</item>

</catalog> 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="xml" indent="yes" />
 <xsl:output doctype-system="catalog.dtd" />
 <xsl:variable name="discount">0.70</xsl:variable>
 <xsl:variable name="discountPrice"
   select="format-number(catalog/item/price - (catalog/item/price) * $discount, "###.00")" />
 <xsl:template match="catalog">
   <xsl:copy>
     <xsl:apply-templates select="item" />
   </xsl:copy>
 </xsl:template>
 <xsl:template match="item">
   <xsl:copy>
     <xsl:copy-of select="@id" />
     <xsl:copy-of select="maker|description|size|price" />
     <discount>
       <xsl:value-of select="$discount" />
     </discount>
     <discountPrice>
       <xsl:value-of select="$discountPrice" />
     </discountPrice>
     <xsl:copy-of select="currency" />
   </xsl:copy>
 </xsl:template>

</xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog

 SYSTEM "catalog.dtd">

<catalog>

  <item id="SC-0001">
     <maker>A</maker>
     <description>B</description>
     <size>L</size>
     <price>120.00</price>
     <discount>0.70</discount>
     <discountPrice>36.00</discountPrice>
     <currency>USD</currency>
  </item>

</catalog></source>


format-number(blue div orange, "#.##", "f2")

   <source lang="xml">

File: Transform.xslt <?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:decimal-format name="f1"   decimal-separator=":"           grouping-separator="/"/>
 <xsl:decimal-format name="f2"   infinity="Really, really big"   NaN="[not a number]"/>
 <xsl:template match="/">
   
   <xsl:text>format-number(blue div orange, "#.##", "f2")=</xsl:text>
   <xsl:value-of select="format-number(blue div orange, "#.##", "f2")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(blue div orange, "#.##", "f2")=[not a number]</source>


format-number(number(1) div 0, "#.#")

   <source lang="xml">

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:decimal-format decimal-separator="," grouping-separator="."/>
 <xsl:decimal-format name="us_default"/>
 <xsl:decimal-format name="other_options" NaN="[not a number]" infinity="unfathomably huge"/>
 <xsl:decimal-format name="hash_mark" digit="!"/>
 <xsl:template match="/">
   <xsl:text>format-number(number(1) div 0, "#.#") : </xsl:text>
   <xsl:value-of select="format-number(number(1) div 0, "#.#")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(number(1) div 0, "#.#") : Infinity</source>


format-number(number(1) div 0, "#.#", "other_options")

   <source lang="xml">

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:decimal-format decimal-separator="," grouping-separator="."/>
 <xsl:decimal-format name="us_default"/>
 <xsl:decimal-format name="other_options" NaN="[not a number]" infinity="unfathomably huge"/>
 <xsl:decimal-format name="hash_mark" digit="!"/>
 <xsl:template match="/">
   <xsl:text>format-number(number(1) div 0, "#.#", "other_options") : </xsl:text>
   <xsl:value-of select="format-number(number(1) div 0, "#.#", "other_options")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(number(1) div 0, "#.#", "other_options") : unfathomably huge</source>


format-number(number("blue") * number("orange"), "#")

   <source lang="xml">

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:decimal-format decimal-separator="," grouping-separator="."/>
 <xsl:decimal-format name="us_default"/>
 <xsl:decimal-format name="other_options" NaN="[not a number]" infinity="unfathomably huge"/>
 <xsl:decimal-format name="hash_mark" digit="!"/>
 <xsl:template match="/">
   <xsl:text>format-number(number("blue") * number("orange"), "#") : </xsl:text>
   <xsl:value-of select="format-number(number("blue") * number("orange"), "#")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(number("blue") * number("orange"), "#") : NaN</source>


format-number(number("blue") * number("orange"), "#", "other_options")

   <source lang="xml">

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:decimal-format decimal-separator="," grouping-separator="."/>
 <xsl:decimal-format name="us_default"/>
 <xsl:decimal-format name="other_options" NaN="[not a number]" infinity="unfathomably huge"/>
 <xsl:decimal-format name="hash_mark" digit="!"/>
 <xsl:template match="/">
   <xsl:text>format-number(number("blue") * number("orange"), "#", "other_options") : </xsl:text>
   <xsl:value-of select="format-number(number("blue") * number("orange"), "#", "other_options")"/>
 </xsl:template>

</xsl:stylesheet> Output: format-number(number("blue") * number("orange"), "#", "other_options") : [not a number]</source>


formatting of multilevel numbers

   <source lang="xml">

File: Data.xml <?xml version="1.0" encoding="utf-8"?>

 <chapter>First Chapter</chapter>
 <chapter>
   Second Chapter
   <chapter>Subchapter 1</chapter>
   <chapter>Subchapter 2</chapter>
 </chapter>
 <chapter>
   Third Chapter
   <chapter>Subchapter A</chapter>
   <chapter>
     Subchapter B
     <chapter>sub a</chapter>
     <chapter>sub b</chapter>
   </chapter>
   <chapter>Subchapter C</chapter>
 </chapter>

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="/">
<xsl:for-each select="//chapter"> <TR> <TD> <xsl:number level="multiple" format="I-1-a:"/> </TD> <TD> <xsl:value-of select="./text()"/> </TD> </TR> </xsl:for-each> </TABLE> </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?>
Number</TH>
         <td>text</TH>
<TR><TD>I:</TD><TD>First Chapter</TD></TR><TR><TD>II:</TD><TD>
   Second Chapter
   </TD></TR><TR><TD>II-1:</TD><TD>Subchapter 1</TD></TR><TR><TD>II-2:</TD><TD>Subchapter 2</TD></TR><TR><TD>III:</TD><TD>
   Third Chapter
   </TD></TR><TR><TD>III-1:</TD><TD>Subchapter A</TD></TR><TR><TD>III-2:</TD><TD>
     Subchapter B
     </TD></TR><TR><TD>III-2-a:</TD><TD>sub a</TD></TR><TR><TD>III-2-b:</TD><TD>sub b</TD></TR><TR><TD>III-3:</TD><TD>Subchapter C</TD></TR></TABLE></source>
   
  

select=format-number(catalog/item/price * 0.60, ###.00)

   <source lang="xml">

File: Data.xml <?xml version="1.0"?> <catalog>

<item id="SC-0001">
 <maker>A</maker>
 <description>B</description>
 <size>L</size>
 <price>120.00</price>
 <currency>USD</currency>
</item>

</catalog> 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="xml" indent="yes" />
 <xsl:output doctype-system="catalog.dtd" />
 <xsl:variable name="discount">
   <discount>0.40</discount>
   <discountPrice>
     <xsl:value-of
       select="format-number(catalog/item/price * 0.60, "###.00")" />
   </discountPrice>
 </xsl:variable>
 <xsl:template match="catalog">
   <xsl:copy>
     <xsl:apply-templates select="item" />
   </xsl:copy>
 </xsl:template>
 <xsl:template match="item">
   <xsl:copy>
     <xsl:copy-of select="@id" />
     <xsl:copy-of select="maker|description|size|price" />
     <xsl:copy-of select="$discount" />
     <xsl:copy-of select="currency" />
   </xsl:copy>
 </xsl:template>

</xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog

 SYSTEM "catalog.dtd">

<catalog>

  <item id="SC-0001">
     <maker>A</maker>
     <description>B</description>
     <size>L</size>
     <price>120.00</price>
     <discount>0.40</discount>
     <discountPrice>72.00</discountPrice>
     <currency>USD</currency>
  </item>

</catalog></source>


select=format-number($totalSales, ##,###)

   <source lang="xml">

File: Data.xml

File: Transform.xslt <?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:decimal-format name="f1"   decimal-separator=":"           grouping-separator="/"/>
 <xsl:decimal-format name="f2"   infinity="Really, really big"   NaN="[not a number]"/>
 <xsl:template match="/">
   
   <xsl:variable name="totalSales" select="sum(/report/brand/units)"/>
   <xsl:for-each select="report/brand">
     <xsl:value-of select="name"/>
     <xsl:text>: 
    </xsl:text>
     <xsl:value-of select="format-number(units, "##,###")"/>
     <xsl:text> bars sold, </xsl:text>
     <xsl:value-of select="format-number(units div $totalSales, "##%")"/>
     <xsl:text> of all sales.</xsl:text>
     <xsl:text>
</xsl:text>
     <xsl:text>
</xsl:text>
   </xsl:for-each> 
   <xsl:text>Total sales: </xsl:text>
   <xsl:value-of select="format-number($totalSales, "##,###")"/>
   <xsl:text> bars.
</xsl:text>
 </xsl:template>

</xsl:stylesheet> Output: Total sales: bars.</source>

Number</TH><td>text</TH>