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