1<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
2
3<!DOCTYPE xsl:stylesheet [
4
5<!-- namespace for SVG -->
6<!ENTITY svgns "http://www.w3.org/2000/svg">
7<!-- namespace for XSLT -->
8<!ENTITY xsltns "http://www.w3.org/1999/XSL/Transform">
9
10<!-- namespaces for several EXSLT extension modules (see
11     http://www.exslt.org for description) -->
12<!ENTITY cns   "http://exslt.org/common"> <!-- EXSLT-Common -->
13<!ENTITY fns   "http://exslt.org/functions"> <!-- EXSLT-Functions -->
14<!ENTITY mns   "http://exslt.org/math"> <!-- EXSLT-Math -->
15
16<!ENTITY foons "http://www.foo.org/bar">
17
18]>
19
20<xsl:stylesheet version="1.0" 
21                xmlns="&svgns;" 
22                xmlns:xsl="&xsltns;"
23                xmlns:exsl="&cns;"
24                xmlns:func="&fns;"
25                xmlns:math="&mns;"
26                xmlns:foo="&foons;"
27                extension-element-prefixes="exsl func math foo"
28                exclude-result-prefixes="xsl exsl func math">
29
30<xsl:output method="xml" indent="yes" encoding="iso-8859-1" standalone="yes"/>
31
32<xsl:template match="/">
33
34    <xsl:text>Largest number value: </xsl:text>
35    <xsl:value-of 
36  select="math:max(rootelement/childelement/@val[string(number(.)) != 'NaN'])"/>
37    <xsl:text>
38Largest number value (computed by function foo:getMaxVal): </xsl:text>
39    <xsl:value-of select="foo:getMaxVal(rootelement/childelement)"/>
40    <xsl:text>
41Largest number value (computed by function foo:getMaxVal2): </xsl:text>
42    <xsl:value-of select="foo:getMaxVal2(rootelement/childelement)"/>
43</xsl:template>            
44
45<func:function name="foo:getMaxVal">
46  <xsl:param name="nodes"/>
47
48  <xsl:variable name="resNodes">
49    <xsl:for-each select="$nodes">
50      <xsl:if test="@val and string(number(@val)) != 'NaN'">
51        <dummynode>
52          <xsl:value-of select="@val"/>
53        </dummynode>
54      </xsl:if>
55    </xsl:for-each>
56  </xsl:variable>
57
58  <xsl:variable name="resNodeSet" select="exsl:node-set($resNodes)"/>
59  
60  <func:result select="math:max($resNodeSet/*)"/>
61</func:function>
62
63<func:function name="foo:getMaxVal2">
64  <xsl:param name="nodes"/>
65
66  <xsl:variable name="resNodes">
67    <xsl:for-each select="$nodes">
68      <xsl:if test="@val and string(number(@val)) != 'NaN'">
69        <dummynode>
70          <xsl:value-of select="@val"/>
71        </dummynode>
72      </xsl:if>
73    </xsl:for-each>
74  </xsl:variable>
75  
76  <func:result select="math:max(exsl:node-set($resNodes)/*)"/>
77</func:function>
78
79</xsl:stylesheet>
80
81