我正在尝试从纽约时报加载这些RSS源:
当我使用以下代码行时,一切都很好,没有错误。
<a href="#XMLContent.rss.channel.item[idx].link.xmlText#">
#XMLContent.rss.channel.item[idx].title.xmlText#
</a>
但是当我实际点击链接时,网址没有过来。我查看了<cfdump>
,并看到对于这些Feed,网址保存在 ID 和 rsslink 字段中。当我拉动饲料时,使用其中一种:
<a href="#XMLContent.rss.channel.item[idx].id.xmlText#">
#XMLContent.rss.channel.item[idx].title.xmlText#
</a>
<a href="#XMLContent.rss.channel.item[idx].rsslink.xmlText#">
#XMLContent.rss.channel.item[idx].title.xmlText#
</a>
我收到其中一个错误:
元素RSSLINK.XMLTEXT在类型为class的Java对象中未定义 coldfusion.xml.XmlNodeMap引用为''
元素RSSLINK.XMLTEXT在类型为class的Java对象中未定义 coldfusion.xml.XmlNodeMap引用为''
有谁知道如何摆脱这个错误?我用谷歌搜索但无济于事。
答案 0 :(得分:2)
我不确定你在哪里获得“ID”和“rsslink”。从我所看到的,“链接”网址存储在名为“href”的属性中。尝试使用XmlAttributes:
#XMLContent.rss.channel.item[idx].link.XmlAttributes['href']#
<强>更新强>
我在CF8下运行了一些测试,使用该属性工作正常(见下文)。请注意,您没有包含用于解析Feed的代码,因此我猜您将cffhtp
与xmlParse
结合使用。
<cfhttp url="http://rss.nytimes.com/services/xml/rss/nyt/Politics.xml" result="rssXML">
<cfset XMLContent = xmlParse(rssXML.fileContent)>
<cfloop from="1" to="#arrayLen(XMLContent.rss.channel.item)#" index="idx">
<cfset itemNode = XMLContent.rss.channel.item[idx]>
<cfoutput>
<a href="#itemNode.link.XmlAttributes['href']#">
#itemNode.title.xmlText#
</a><br />
</cfoutput>
</cfloop>
注意:业务Feed上的xml结构似乎有所不同。有些节点将网址存储在href
属性中,其他节点存储在link.xmlText
中。 XMLAttributes是一种结构。因此,在使用之前,您始终可以使用structKeyExists函数来验证href属性是否存在。如果找不到,那就做点别的事。
<cfif structKeyExists(itemNode.link.XmlAttributes, "href")>
attributes exists. go ahead and use it
<cfelse>
not found. do something else ...
</cfif>