В конечном результате важен конечный результат!

четверг, января 19, 2006

Парсинг XML-файлов в ColdFusion

Хм... о чем бы вам таком рассказать? Ну, чтоб так, из жизни было... :)
Пожалуй что расскажу о том, как парсить rss-фиды в ColdFusion.
Это опять же связано напряму с RSS-аггрегатором, который сейчас дописывается.
Итак, задача состоит в том, чтобы произвести парсинг указанного фида.
Ну лано. Будем парсить фиды не тока примитивно, а с использованием XPath.

Код, который я написал, предельно прост для понимания, и думаю, что он не нуждается в дополнительных комментариев, кроме как приведенных в исходниках:


<cfhttp url="http://weblogs.macromedia.com/mxna/xml/rss.cfm?query=byMostRecent&languages=1,12" method="get" />
<cfset rss = XMLParse(cfhttp.filecontent)>
<!--- собираем массив из элементов items --->
<cfset items = XMLSearch(rss, "/rss/channel/item")>
<cfdump var="#items#">
<cfset rssItems = QueryNew("title,description,link")>
<!---перебираем массив из элементов --->
<cfloop from="1" to="#ArrayLen(items)#" index="i">
<cfset row = QueryAddRow(rssItems)>
<cfset title = XMLSearch(rss, "/rss/channel/item[#i#]/title")>
<cfif ArrayLen(title)>
<cfset title = title[1].xmlText>
<cfelse>
<cfset title="">
</cfif>
<cfset description = XMLSearch(items[i], "/rss/channel/item[#i#]/description")>
<cfif ArrayLen(description)>

<cfset description = description[1].xmlText>
<cfelse>
<cfset description="">
</cfif>

<cfset link = XMLSearch(items[i], "/rss/channel/item[#i#]/link")>
<cfif ArrayLen(link)>
<cfset link = link[1].xmlText>
<cfelse>
<cfset link="">
</cfif>
<!--- добавляем в запрос --->
<cfset QuerySetCell(rssItems, "title", title, row)>
<cfset QuerySetCell(rssItems, "description", description, row)>
<cfset QuerySetCell(rssItems, "link", link, row)>
</cfloop>
<ul>
<cfoutput query="rssItems">
<li><a href="#rssItems.link#">#rssItems.title#</a> - #rssItems.description#</li>
</cfoutput>
</ul>

Комментариев нет: