Download the EasyCFM.COM Browser Toolbar!
9 Day Weather Forecast
9 Day Weather Forecast
soxml.cfm (Download the entire soxml custom tag - Read the forum thread on this tutorial)
<cfsetting enablecfoutputonly="Yes">
<!---
Custom Tag: SOXML;
Version: 1.6;
Released: 5/24/2001;
Created: 8/18/2000;
Author: Brett Suwyn; mailto:brett@suwyn.com
Description:
This tag is a simple to use XML interface for ColdFusion;
Usage:
<cf_SOXML
action="CF2XMLDom|CF2XML|XML2CF|XML2DOM|XML2HTML"
input="" [required:all actions]
output="" [required:CF2XMLDom|CF2XML|XML2CF|XML2DOM]
type="" [required:XML2CF|XML2DOM]
rootname="" [required:CF2XMLDom|CF2XML]
progid="" [optional]
>

Modifications:
5/20/2001: Fixed problems with returning object from Transform action
12/18/2000: Added Transform action;
12/18/2000: Tweaked XML2HTML code;
10/23/2000: Fixed loss of root level name when using XML2CF;


--->


<cfparam name="Attributes.ProgId" default="Microsoft.XMLDom">


<cfswitch expression="#Attributes.Action#">

<!--- ~~~CF2XMLDOM~~~ --->
<!--- Build XML Dom object --->
<!--- ~~~~~~~~~~~~~~ --->
<cfcase value="CF2XMLDOM">

<cfparam name="Attributes.Init" default="1">

<cfif Attributes.Init>
<cfparam name="Attributes.Output" type="string">
<cfparam name="Attributes.Input">
<cfparam name="Attributes.RootName" default="ROOT">
<cfparam name="Attributes.StandAlone" default="">
<cfparam name="Attributes.Encoding" default="">

<cfobject action="CREATE" class="#Attributes.ProgId#" type="COM" name="Request.XMLDoc">

<cfscript>
Request.XMLDoc.async = 0;
Request.XMLDoc.loadXML("<?xml version=""1.0""" & IIf(Len(Attributes.Encoding),DE("encoding=" & Chr(34) & Attributes.Encoding & Chr(34)),DE("")) & IIf(Len(Attributes.StandAlone),DE("standalone=" & Chr(34) & LCase(YesNoFormat(Attributes.StandAlone)) & Chr(34)),DE("")) & "?>" & "<" & UCase(Attributes.RootName) & ">" & "</" & UCase(Attributes.RootName) & ">");
Attributes.Node = Request.XMLdoc.documentElement;
oParseError = Request.XMLDoc.ParseError;
</cfscript>

<!--- if DOM error throw an exception --->
<cfif oParseError.ErrorCode>
<cfthrow type="SOXML.ParseError" message="DOM Error" detail="#oParseError.Reason# | Line:#oParseError.Line#">
</cfif>

</cfif>

<cfif isStruct(Attributes.Input)>

<cfloop collection="#Attributes.Input#" item="Key">

<cfscript>
ndKey = Request.xmlDoc.createNode (1, UCase(Key),"");
Attributes.Node.appendChild(ndKey);
vCurrent = Attributes.Input[Key];
</cfscript>

<cf_SOXML action="CF2XMLDOM" init="0" input="#vCurrent#" node="#ndKey#">

</cfloop>

<cfelseif isQuery(Attributes.Input)>

<cfloop query="Attributes.Input">

<cfscript>
ndRow = Request.xmlDoc.createNode (1, "ROW","");
Attributes.Node.appendChild(ndRow);
</cfscript>

<cfloop index="idx" list="#Attributes.Input.ColumnList#">

<cfscript>
ndColumn = Request.xmlDoc.createNode (1, UCase(idx),"");
ndRow.appendChild(ndColumn);
</cfscript>

<cf_SOXML action="CF2XMLDOM" init="0" input="#Evaluate(idx)#" node="#ndColumn#">

</cfloop>

</cfloop>

<cfelseif isArray(Attributes.Input)>

<cfloop index="idx" from="1" to="#ArrayLen(Attributes.Input)#">

<cfscript>
ndArray = Request.xmlDoc.createNode (1, "IDX","");
Attributes.Node.appendChild(ndArray);
</cfscript>

<cf_SOXML action="CF2XMLDOM" init="0" input="#Attributes.Input[idx]#" node="#ndArray#">

</cfloop>

<cfelseif isSimpleValue(Attributes.Input)>

<cfscript>
if (ReFind("<|>|&|'|""",Attributes.Input))
ndSimple = Request.xmlDoc.createNode(4, "", "");
else
ndSimple = Request.xmlDoc.createNode(3, "", "");
ndSimple.text = Attributes.Input;

Attributes.Node.appendChild(ndSimple);
</cfscript>

</cfif>

<cfscript>
if (Attributes.Init){
SetVariable("Caller."&Attributes.Output,Request.XMLDoc);
}
</cfscript>

</cfcase>

<!--- ~~~CF2XML~~~ --->
<!--- Build XML string --->
<!--- ~~~~~~~~~~~ --->
<cfcase value="CF2XML">

<cfparam name="Attributes.Input">
<cfparam name="Attributes.Init" default="1">
<cfparam name="Attributes.RootName" default="ROOT">


<cfif Attributes.Init>

<cfparam name="Attributes.Output" type="string">
<cfparam name="Attributes.StandAlone" default="">
<cfparam name="Attributes.Encoding" default="">

<cfset Request.XMLDoc = "<?xml version=""1.0""" & IIf(Len(Attributes.Encoding),DE(" encoding=" & Chr(34) & Attributes.Encoding & Chr(34)),DE("")) & IIf(Len(Attributes.StandAlone),DE(" standalone=" & Chr(34) & LCase(YesNoFormat(Attributes.StandAlone)) & Chr(34)),DE("")) & "?>" & "<" & UCase(Attributes.RootName) & ">">

</cfif>

<cfif isStruct(Attributes.Input)>

<cfloop collection="#Attributes.Input#" item="Key">

<cfset Request.XMLDoc = Request.XMLDoc & "<" & Key & ">">

<cf_SOXML action="CF2XML" init="0" input="#Attributes.Input[Key]#">

<cfset Request.XMLDoc = Request.XMLDoc & "</" & Key & ">">

</cfloop>

<cfelseif isQuery(Attributes.Input)>

<cfloop query="Attributes.Input">

<cfset Request.XMLDoc = Request.XMLDoc & "<ROW>">

<cfloop index="idx" list="#Attributes.Input.ColumnList#">

<cfset Request.XMLDoc = Request.XMLDoc & "<" & idx & ">">

<cf_SOXML action="CF2XML" init="0" input="#Evaluate(idx)#">

<cfset Request.XMLDoc = Request.XMLDoc & "</" & idx & ">">

</cfloop>

<cfset Request.XMLDoc = Request.XMLDoc & "</ROW>">

</cfloop>

<cfelseif isArray(Attributes.Input)>

<cfloop index="idx" from="1" to="#ArrayLen(Attributes.Input)#">

<cfset Request.XMLDoc = Request.XMLDoc & "<IDX>">

<cf_SOXML action="CF2XML" init="0" input="#Attributes.Input[idx]#">

<cfset Request.XMLDoc = Request.XMLDoc & "</IDX>">

</cfloop>

<cfelseif isSimpleValue(Attributes.Input)>

<cfscript>
if (ReFind("<|>|&|'|""", Attributes.Input))
Request.XMLDoc = Request.XMLDoc & "<![CDATA[" & Attributes.Input & "]]>";
else
Request.XMLDoc = Request.XMLDoc & Attributes.Input;
</cfscript>

</cfif>

<cfscript>
if (Attributes.Init){
Request.XMLDoc = Request.XMLDoc & "</" & UCase(Attributes.RootName) & ">";
SetVariable("Caller."&Attributes.Output ,Request.XMLDoc);
}
</cfscript>

</cfcase>

<!--- ~~~~~XML2CF~~~~~~~ --->
<!--- Build CF object from XML --->
<!--- ~~~~~~~~~~~~~~~~ --->
<cfcase value="XML2CF">

<cfparam name="Attributes.Init" default="1">

<cfif Attributes.Init>
<cfparam name="Attributes.Input">
<cfparam name="Attributes.Output" default="Struct">
<cfparam name="Attributes.Type" default="Variable">

<cfobject action="CREATE" class="#Attributes.ProgId#" type="COM" name="XMLDoc">
<cfscript>
XMLDoc.async = 0;
if (Attributes.Type eq "File")
XMLDoc.Load(Attributes.Input);
else
XMLDoc.loadXML(Attributes.Input);
oParseError = XMLDoc.ParseError;
</cfscript>

<!--- if DOM error throw an exception --->
<cfif oParseError.ErrorCode>
<cfthrow type="SOXML.ParseError" message="DOM Error" detail="#oParseError.Reason# | Line:#oParseError.Line#">
</cfif>

<cfscript>
Attributes.Node = XMLDoc;
Attributes.Struct = StructNew();
</cfscript>
</cfif>

<cfloop collection="#Attributes.Node.childNodes#" item="ThisNode">
<cfswitch expression="#ThisNode.NodeType#">
<cfcase value="1">
<cfset CurrentNode = StructNew()> <!--- initialize node structure --->

<!--- Write Attributes to Structure --->
<cfset CurrentNode["Attributes"] = StructNew()>
<cfloop collection="#ThisNode.Attributes#" item="ThisAttribute">
<cfset CurrentNode.Attributes[ThisAttribute.Name] = ThisAttribute.Value>
</cfloop>
<cfif StructIsEmpty(CurrentNode["Attributes"])>
<cfset StructDelete(CurrentNode,"Attributes")>
</cfif>

<!--- Write current node to Structure --->
<cfscript>
if(isArray(Attributes.Struct)) // Currently part of a collection Attributes.Struct[ArrayLen(Attributes.Struct)+1] = CurrentNode;
else if(structKeyExists(Attributes.Struct,ThisNode.NodeName)){ // Duplicate keys found if (isArray(Attributes.Struct[ThisNode.NodeName])) // Collection already exists Attributes.Struct[ThisNode.NodeName][ArrayLen(Attributes.Struct[ThisNode.NodeName])+1] = CurrentNode;
else{ // Create new collection TempCollection = ArrayNew(1);
TempCollection[1] = Attributes.Struct[ThisNode.NodeName];
TempCollection[2] = CurrentNode;
Attributes.Struct[ThisNode.NodeName] = TempCollection;
}
}else // Single element Attributes.Struct[ThisNode.NodeName] = CurrentNode;
</cfscript>

<!--- Recurse if children nodes exist --->
<cfif ThisNode.hasChildNodes()>
<cf_SOXML action="XML2CF" init="0" struct="#CurrentNode#" node="#ThisNode#">
<cfelse>
<cfset CurrentNode.Value = "">
</cfif>

</cfcase>
<cfcase value="3,4">
<cfset Attributes.Struct.Value = ThisNode.NodeValue>
</cfcase>
<cfcase value="8">
<cfset Attributes.Struct.Comment = ThisNode.NodeValue>
</cfcase>
</cfswitch>
</cfloop>

<cfif Attributes.Init>
<!--- Return the new structure to the calling template --->
<cfset "Caller.#Attributes.Output#"= Attributes.Struct>
</cfif>
</cfcase>

<!--- ~~~~~XML2DOM~~~~ --->
<!--- Loads XML into DOM --->
<!--- ~~~~~~~~~~~~~~~~ --->
<cfcase value="XML2DOM">

<cfparam name="Attributes.Input">
<cfparam name="Attributes.Output">
<cfparam name="Attributes.Type" default="Variable">

<cfobject action="CREATE" class="#Attributes.ProgId#" type="COM" name="XMLDoc">

<cfscript>
XMLDoc.async = 0;
if (Len(Attributes.Input)) {
if (Attributes.Type eq "File")
XMLDoc.Load(Attributes.Input);
else
XMLDoc.loadXML(Attributes.Input);
}
oParseError = XMLDoc.ParseError;
</cfscript>

<cfif oParseError.ErrorCode>
<cfthrow type="SOXML.ParseError" message="DOM Error" detail="#oParseError.Reason# | Line:#oParseError.Line#">
</cfif>

<cfset "Caller.#Attributes.Output#"= XMLDoc>

</cfcase>

<!--- ~~~~~Transform~~~~~~~~~~~~ --->
<!--- Transforms XML from XSL Template --->
<!--- ~~~~~~~~~~~~~~~~~~~~~~~~ --->
<cfcase value="Transform">

<cfparam name="Attributes.Input">
<cfparam name="Attributes.Type" default="Variable">
<cfparam name="Attributes.XSLInput">
<cfparam name="Attributes.XSLType" default="File">
<cfparam name="Attributes.Output">
<cfparam name="Attributes.r_Type" default="Text">

<!--- Load the XSL Document --->
<cf_SOXML action="XML2DOM" progid="#Attributes.ProgId#" input="#Attributes.XSLInput#" output="XSLDoc" type="#Attributes.XSLType#">
<!--- Load the XML Document --->
<cf_SOXML action="XML2DOM" progid="#Attributes.ProgId#" input="#Attributes.Input#" output="XMLDoc" type="#Attributes.Type#">
<cfif Attributes.r_Type EQ "Object">
<!--- Create a result xml DOM object --->
<cf_SOXML action="XML2DOM" progid="#Attributes.ProgId#" input="" output="oResult">
<cfscript>»// Do the transformation XMLDoc.transformNodeToObject(XSLDoc,oResult);
"Caller.#Attributes.Output#" = oResult;
</cfscript>
<cfelse>
<cfscript>»// Do the transformation sResult = XMLDoc.transformNode(XSLDoc);
"Caller.#Attributes.Output#" = sResult;
</cfscript>
</cfif>
</cfcase>

<!--- ~~~~~XML2HTML~~~~~~~ --->
<!--- Output XML to HTML inline --->
<!--- ~~~~~~~~~~~~~~~~~~~ --->
<cfcase value="XML2HTML">

<cfparam name="Attributes.Input">
<cfparam name="Attributes.Type" default="Variable">

<cf_SOXML action="Transform" input="#Attributes.Input#" type="#Attributes.Type#" xslinput="http://www.siteobjects.com/downloads/soxml.xsl" xsltype="File" output="strValue" r_type="Text">

<cfoutput>#strValue#</cfoutput>

</cfcase>

<!--- ~~INVALID ACTION~~ --->
<!--- Throw error --->
<!--- ~~~~~~~~~~~~~~~ --->
<cfdefaultcase>
<cfthrow type="SOXML.Error" message="cf_SOXML Error" detail="Invalid action">
</cfdefaultcase>

</cfswitch>
<cfsetting enablecfoutputonly="No">
weather.cfm
<!--- Set the ZIP Code below --->
<cfset strZIP = "75460">
<!--- The below line will set the directory to get the XMl --->
<cfset sCurrentDirectory = GetDirectoryFromPath(CGI.Path_Translated)>
<!--- Retrieve the XML for the forecast --->
<cfhttp url="http://www.ejse.com/WeatherService/Service.asmx/GetNineDayForecastInfo?zipCode=#strZIP#"
method="GET"
path="#Left(sCurrentDirectory, Len(sCurrentDirectory)-1)#"
file="#strZIP#.xml"
resolveurl="false">
</cfhttp>
<cfoutput>#sCurrentDirectory#</cfoutput>
<cf_SOXML
action="XML2CF"
input="#sCurrentDirectory##strZIP#.xml"
output="Forecast"
type="file">


<cfset sDay=ArrayNew(1)>
<cfset sDate=ArrayNew(1)>
<cfset sForecast=ArrayNew(1)>
<cfset sHigh=ArrayNew(1)>
<cfset sLow=ArrayNew(1)>

<cfscript>
//Day1
sDay[1] = Forecast.NineDayForecastInfo.Day1.Day.Value;
sDay[1] = Replace(sDay[1], "Sun", "Sunday");
sDay[1] = Replace(sDay[1], "Mon", "Monday");
sDay[1] = Replace(sDay[1], "Tue", "Tuesday");
sDay[1] = Replace(sDay[1], "Wed", "Wednesday");
sDay[1] = Replace(sDay[1], "Thu", "Thursday");
sDay[1] = Replace(sDay[1], "Fri", "Friday");
sDay[1] = Replace(sDay[1], "Sat", "Saturday");
sDate[1] = Forecast.NineDayForecastInfo.Day1.Date.Value;
sForecast[1] = Forecast.NineDayForecastInfo.Day1.Forecast.Value;
sHigh[1] = Forecast.NineDayForecastInfo.Day1.High.Value;
sLow[1] = Forecast.NineDayForecastInfo.Day1.Low.Value;
//Day2
sDay[2] = Forecast.NineDayForecastInfo.Day2.Day.Value;
sDay[2] = Replace(sDay[2], "Sun", "Sunday");
sDay[2] = Replace(sDay[2], "Mon", "Monday");
sDay[2] = Replace(sDay[2], "Tue", "Tuesday");
sDay[2] = Replace(sDay[2], "Wed", "Wednesday");
sDay[2] = Replace(sDay[2], "Thu", "Thursday");
sDay[2] = Replace(sDay[2], "Fri", "Friday");
sDay[2] = Replace(sDay[2], "Sat", "Saturday");
sDate[2] = Forecast.NineDayForecastInfo.Day2.Date.Value;
sForecast[2] = Forecast.NineDayForecastInfo.Day2.Forecast.Value;
sHigh[2] = Forecast.NineDayForecastInfo.Day2.High.Value;
sLow[2] = Forecast.NineDayForecastInfo.Day2.Low.Value;
//Day3
sDay[3] = Forecast.NineDayForecastInfo.Day3.Day.Value;
sDay[3] = Replace(sDay[3], "Sun", "Sunday");
sDay[3] = Replace(sDay[3], "Mon", "Monday");
sDay[3] = Replace(sDay[3], "Tue", "Tuesday");
sDay[3] = Replace(sDay[3], "Wed", "Wednesday");
sDay[3] = Replace(sDay[3], "Thu", "Thursday");
sDay[3] = Replace(sDay[3], "Fri", "Friday");
sDay[3] = Replace(sDay[3], "Sat", "Saturday");
sDate[3] = Forecast.NineDayForecastInfo.Day3.Date.Value;
sForecast[3] = Forecast.NineDayForecastInfo.Day3.Forecast.Value;
sHigh[3] = Forecast.NineDayForecastInfo.Day3.High.Value;
sLow[3] = Forecast.NineDayForecastInfo.Day3.Low.Value;
//Day4
sDay[4] = Forecast.NineDayForecastInfo.Day4.Day.Value;
sDay[4] = Replace(sDay[4], "Sun", "Sunday");
sDay[4] = Replace(sDay[4], "Mon", "Monday");
sDay[4] = Replace(sDay[4], "Tue", "Tuesday");
sDay[4] = Replace(sDay[4], "Wed", "Wednesday");
sDay[4] = Replace(sDay[4], "Thu", "Thursday");
sDay[4] = Replace(sDay[4], "Fri", "Friday");
sDay[4] = Replace(sDay[4], "Sat", "Saturday");
sDate[4] = Forecast.NineDayForecastInfo.Day4.Date.Value;
sForecast[4] = Forecast.NineDayForecastInfo.Day4.Forecast.Value;
sHigh[4] = Forecast.NineDayForecastInfo.Day4.High.Value;
sLow[4] = Forecast.NineDayForecastInfo.Day4.Low.Value;
//Day5
sDay[5] = Forecast.NineDayForecastInfo.Day5.Day.Value;
sDay[5] = Replace(sDay[5], "Sun", "Sunday");
sDay[5] = Replace(sDay[5], "Mon", "Monday");
sDay[5] = Replace(sDay[5], "Tue", "Tuesday");
sDay[5] = Replace(sDay[5], "Wed", "Wednesday");
sDay[5] = Replace(sDay[5], "Thu", "Thursday");
sDay[5] = Replace(sDay[5], "Fri", "Friday");
sDay[5] = Replace(sDay[5], "Sat", "Saturday");
sDate[5] = Forecast.NineDayForecastInfo.Day5.Date.Value;
sForecast[5] = Forecast.NineDayForecastInfo.Day5.Forecast.Value;
sHigh[5] = Forecast.NineDayForecastInfo.Day5.High.Value;
sLow[5] = Forecast.NineDayForecastInfo.Day5.Low.Value;
//Day6
sDay[6] = Forecast.NineDayForecastInfo.Day6.Day.Value;
sDay[6] = Replace(sDay[6], "Sun", "Sunday");
sDay[6] = Replace(sDay[6], "Mon", "Monday");
sDay[6] = Replace(sDay[6], "Tue", "Tuesday");
sDay[6] = Replace(sDay[6], "Wed", "Wednesday");
sDay[6] = Replace(sDay[6], "Thu", "Thursday");
sDay[6] = Replace(sDay[6], "Fri", "Friday");
sDay[6] = Replace(sDay[6], "Sat", "Saturday");
sDate[6] = Forecast.NineDayForecastInfo.Day6.Date.Value;
sForecast[6] = Forecast.NineDayForecastInfo.Day6.Forecast.Value;
sHigh[6] = Forecast.NineDayForecastInfo.Day6.High.Value;
sLow[6] = Forecast.NineDayForecastInfo.Day6.Low.Value;
//Day7
sDay[7] = Forecast.NineDayForecastInfo.Day7.Day.Value;
sDay[7] = Replace(sDay[7], "Sun", "Sunday");
sDay[7] = Replace(sDay[7], "Mon", "Monday");
sDay[7] = Replace(sDay[7], "Tue", "Tuesday");
sDay[7] = Replace(sDay[7], "Wed", "Wednesday");
sDay[7] = Replace(sDay[7], "Thu", "Thursday");
sDay[7] = Replace(sDay[7], "Fri", "Friday");
sDay[7] = Replace(sDay[7], "Sat", "Saturday");
sDate[7] = Forecast.NineDayForecastInfo.Day7.Date.Value;
sForecast[7] = Forecast.NineDayForecastInfo.Day7.Forecast.Value;
sHigh[7] = Forecast.NineDayForecastInfo.Day7.High.Value;
sLow[7] = Forecast.NineDayForecastInfo.Day7.Low.Value;
//Day8
sDay[8] = Forecast.NineDayForecastInfo.Day8.Day.Value;
sDay[8] = Replace(sDay[8], "Sun", "Sunday");
sDay[8] = Replace(sDay[8], "Mon", "Monday");
sDay[8] = Replace(sDay[8], "Tue", "Tuesday");
sDay[8] = Replace(sDay[8], "Wed", "Wednesday");
sDay[8] = Replace(sDay[8], "Thu", "Thursday");
sDay[8] = Replace(sDay[8], "Fri", "Friday");
sDay[8] = Replace(sDay[8], "Sat", "Saturday");
sDate[8] = Forecast.NineDayForecastInfo.Day8.Date.Value;
sForecast[8] = Forecast.NineDayForecastInfo.Day8.Forecast.Value;
sHigh[8] = Forecast.NineDayForecastInfo.Day8.High.Value;
sLow[8] = Forecast.NineDayForecastInfo.Day8.Low.Value;
//Day9 (finally )
sDay[9] = Forecast.NineDayForecastInfo.Day7.Day.Value;
sDay[9] = Replace(sDay[9], "Sun", "Sunday");
sDay[9] = Replace(sDay[9], "Mon", "Monday");
sDay[9] = Replace(sDay[9], "Tue", "Tuesday");
sDay[9] = Replace(sDay[9], "Wed", "Wednesday");
sDay[9] = Replace(sDay[9], "Thu", "Thursday");
sDay[9] = Replace(sDay[9], "Fri", "Friday");
sDay[9] = Replace(sDay[9], "Sat", "Saturday");
sDate[9]= Forecast.NineDayForecastInfo.Day9.Date.Value;
sForecast[9] = Forecast.NineDayForecastInfo.Day9.Forecast.Value;
sHigh[9] = Forecast.NineDayForecastInfo.Day9.High.Value;
sLow[9] = Forecast.NineDayForecastInfo.Day9.Low.Value;

</cfscript>

<cfloop from="1" to="9" index="i">
<cfoutput>
<table width=180 style="border: 1px solid black" cellpadding=1 cellspacing=1>
<tr>
<td align="center" bgcolor="ff0000">
<font color="ffffff"><b>#sDay[i]#</b></font>
</td>
</tr>
<tr>
<td bgcolor="ffffff">
<center><font size=1 face="Verdana"><b>#sForecast[i]#</b></font></center>
<br><br>
<font size=2 face="Verdana">
Date: <b>#sDate[i]#, #DateFormat(Now(), "yyyy")#</b><br>
High: <b>#sHigh[i]# F</b><br>
Low: <b>#sLow[i]# F</b>

</td>
</tr>
</table>
<br>
</cfoutput>
</cfloop>


Questions, Bugs, and all other reports should be sent to Drew Tempelmeyer.
Thanks goes to:
Pablo, CJ (for the URL of the XML feed), and everyone else that reported that it wouldn't work. Thanks for your encouragement.
All ColdFusion Tutorials By Author: Drew Tempelmeyer
  • Shout Box [LIVE]!
    Ever want a place where people can chat or post their opinions? Ever heard of a shout box? This tutorial will give you an easy example of having a shout box on your site.
    Author: Drew Tempelmeyer
    Views: 26,970
    Posted Date: Saturday, February 22, 2003
  • WHOIS Search
    This will show you how to make a simple WHOIS search that can be easily added to any site.
    Author: Drew Tempelmeyer
    Views: 15,504
    Posted Date: Sunday, April 27, 2003
  • 9 Day Weather Forecast
    This will retrieve the 9 day weather forecast for the specified ZIP code.
    Author: Drew Tempelmeyer
    Views: 23,937
    Posted Date: Friday, May 16, 2003
  • Parsing XML With ColdFusion MX
    Want to know how to parse XML with ColdFusion with ease and very basic concepts? Then this is the tutorial for you.
    Author: Drew Tempelmeyer
    Views: 30,274
    Posted Date: Sunday, November 9, 2003
  • Creating Static HTML Pages from Dynamic Pages
    Static HTML can help reduce the load on the server. This helps resources be used for other things that you may possibly need. Creating static HTML in ColdFusion is a simple task and can simply be done by following this tutorial.
    Author: Drew Tempelmeyer
    Views: 16,808
    Posted Date: Thursday, March 31, 2005