1 /*
2  * reserved comment block
3  * DO NOT REMOVE OR ALTER!
4  */
5 /*
6  * Copyright 1999-2004 The Apache Software Foundation.
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 /*
21  * $Id: ExsltBase.java,v 1.1.2.1 2005/08/01 02:08:51 jeffsuttor Exp $
22  */
23 package com.sun.org.apache.xalan.internal.lib;
24 
25 import com.sun.org.apache.xml.internal.dtm.ref.DTMNodeProxy;
26 
27 import org.w3c.dom.Node;
28 import org.w3c.dom.NodeList;
29 
30 /**
31  * The base class for some EXSLT extension classes.
32  * It contains common utility methods to be used by the sub-classes.
33  */
34 public abstract class ExsltBase
35 {
36   /**
37    * Return the string value of a Node
38    *
39    * @param n The Node.
40    * @return The string value of the Node
41    */
toString(Node n)42   protected static String toString(Node n)
43   {
44     if (n instanceof DTMNodeProxy)
45          return ((DTMNodeProxy)n).getStringValue();
46     else
47     {
48       String value = n.getNodeValue();
49       if (value == null)
50       {
51         NodeList nodelist = n.getChildNodes();
52         StringBuffer buf = new StringBuffer();
53         for (int i = 0; i < nodelist.getLength(); i++)
54         {
55           Node childNode = nodelist.item(i);
56           buf.append(toString(childNode));
57         }
58         return buf.toString();
59       }
60       else
61         return value;
62     }
63   }
64 
65   /**
66    * Convert the string value of a Node to a number.
67    * Return NaN if the string is not a valid number.
68    *
69    * @param n The Node.
70    * @return The number value of the Node
71    */
toNumber(Node n)72   protected static double toNumber(Node n)
73   {
74     double d = 0.0;
75     String str = toString(n);
76     try
77     {
78       d = Double.valueOf(str).doubleValue();
79     }
80     catch (NumberFormatException e)
81     {
82       d= Double.NaN;
83     }
84     return d;
85   }
86 }
87