Someone who read my RSS Watch article asked me about Atom feed parsing. For the heck of it I wrote up a quick sample. This code has not been heavily tested, and normally it would be in a CFC method or UDF. Also, I don't parse the datetime string, but I describe a method to parse it in the followup to my article. (Not sure when that is going live.) Anyway, enjoy:
<cfapplication name="atomTest">
<cfif not isDefined("application.content")>
<cfhttp url="http://www.bigdumbobject.co.uk/atom.xml">
<cfset application.content = cfhttp.fileContent>
</cfif>
<cfset xmlPacket = xmlParse(application.content)>
<cfset entries = xmlSearch(xmlPacket,"//:entry")>
<cfloop index="x" from="1" to="#arrayLen(entries)#">
<cfset node = structNew()>
<cfset node.title = entries[x].title.xmlText>
<cfset node.link = entries[x].link.xmlAttributes.href>
<cfif structKeyExists(entries[x],"content")>
<cfset node.description = entries[x].content.xmlText>
<cfelse>
<cfset node.description = "">
</cfif>
<cfif structKeyExists(entries[x],"issued")>
<cfset node.date = entries[x].issued.xmlText>
<cfelse>
<cfset node.date = "1/1/1">
</cfif>
<cfdump var="#node#">
</cfloop>
<cfif not isDefined("application.content")>
<cfhttp url="http://www.bigdumbobject.co.uk/atom.xml">
<cfset application.content = cfhttp.fileContent>
</cfif>
<cfset xmlPacket = xmlParse(application.content)>
<cfset entries = xmlSearch(xmlPacket,"//:entry")>
<cfloop index="x" from="1" to="#arrayLen(entries)#">
<cfset node = structNew()>
<cfset node.title = entries[x].title.xmlText>
<cfset node.link = entries[x].link.xmlAttributes.href>
<cfif structKeyExists(entries[x],"content")>
<cfset node.description = entries[x].content.xmlText>
<cfelse>
<cfset node.description = "">
</cfif>
<cfif structKeyExists(entries[x],"issued")>
<cfset node.date = entries[x].issued.xmlText>
<cfelse>
<cfset node.date = "1/1/1">
</cfif>
<cfdump var="#node#">
</cfloop>
Oh, and it isn't obvious, the application stuff is there to simply cache the CFHTTP call while I do my testing.