coldfusion.xml.XmlNodeMap中的元素未定义

时间:2013-05-08 01:32:30

标签: xml coldfusion rss coldfusion-8

我正在尝试从纽约时报加载这些RSS源:

当我使用以下代码行时,一切都很好,没有错误。

     <a href="#XMLContent.rss.channel.item[idx].link.xmlText#">
        #XMLContent.rss.channel.i‌​tem[idx].title.xmlText#
     </a> 

但是当我实际点击链接时,网址没有过来。我查看了<cfdump>,并看到对于这些Feed,网址保存在 ID rsslink 字段中。当我拉动饲料时,使用其中一种:

    <a href="#XMLContent.rss.channel.item[idx].id.xmlText#">
         #XMLContent.rss.channel.ite‌m[idx].title.xmlText#
    </a>
    <a href="#XMLContent.rss.channel.item[idx].rsslink.xmlText#">
        #XMLContent.rss.channe‌l.item[idx].title.xmlText#
    </a> 

我收到其中一个错误:

  

元素RSSLINK.XMLTEXT在类型为class的Java对象中未定义   coldfusion.xml.XmlNodeMap引用为''

     

元素RSSLINK.XMLTEXT在类型为class的Java对象中未定义   coldfusion.xml.XmlNodeMap引用为''

有谁知道如何摆脱这个错误?我用谷歌搜索但无济于事。

1 个答案:

答案 0 :(得分:2)

我不确定你在哪里获得“ID”和“rsslink”。从我所看到的,“链接”网址存储在名为“href”的属性中。尝试使用XmlAttributes:

#XMLContent.rss.channel.item[idx].link.XmlAttributes['href']#

<强>更新

我在CF8下运行了一些测试,使用该属性工作正常(见下文)。请注意,您没有包含用于解析Feed的代码,因此我猜您将cffhtpxmlParse结合使用。

<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>

注意:业务Fee​​d上的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>