001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 /* 019 * $Id: ExsltBase.java 468639 2006-10-28 06:52:33Z minchau $ 020 */ 021 package org.apache.xalan.lib; 022 023 import org.apache.xml.dtm.ref.DTMNodeProxy; 024 025 import org.w3c.dom.Node; 026 import org.w3c.dom.NodeList; 027 028 /** 029 * The base class for some EXSLT extension classes. 030 * It contains common utility methods to be used by the sub-classes. 031 */ 032 public abstract class ExsltBase 033 { 034 /** 035 * Return the string value of a Node 036 * 037 * @param n The Node. 038 * @return The string value of the Node 039 */ 040 protected static String toString(Node n) 041 { 042 if (n instanceof DTMNodeProxy) 043 return ((DTMNodeProxy)n).getStringValue(); 044 else 045 { 046 String value = n.getNodeValue(); 047 if (value == null) 048 { 049 NodeList nodelist = n.getChildNodes(); 050 StringBuffer buf = new StringBuffer(); 051 for (int i = 0; i < nodelist.getLength(); i++) 052 { 053 Node childNode = nodelist.item(i); 054 buf.append(toString(childNode)); 055 } 056 return buf.toString(); 057 } 058 else 059 return value; 060 } 061 } 062 063 /** 064 * Convert the string value of a Node to a number. 065 * Return NaN if the string is not a valid number. 066 * 067 * @param n The Node. 068 * @return The number value of the Node 069 */ 070 protected static double toNumber(Node n) 071 { 072 double d = 0.0; 073 String str = toString(n); 074 try 075 { 076 d = Double.valueOf(str).doubleValue(); 077 } 078 catch (NumberFormatException e) 079 { 080 d= Double.NaN; 081 } 082 return d; 083 } 084 }