我一直在努力寻找解决方案。我的代码与我在 Google 搜索中看到的不同,而且我尝试过的任何方法都不起作用。基本上正如标题所暗示的那样,我想检查一个 Xml 节点是否存在。这是因为 YouTube 提要返回的 XML 不稳定。代码如下。
<cfset YouTubeXml = xmlParse(#YouTubeFavourites.FileContent#) />
<cfset group = XmlSearch(YouTubeXml, "//media:group") />
<cfloop from="1" to="25" index="i">
<cfoutput>
#group[i]['media:thumbnail'][i]['url']#
</cfoutput>
</cfloop>
基本上,错误表明 #group[i]['media:thumbnail'][i]['url']#
不存在。希望有人能帮忙。
最佳答案
下面的代码将检查以确保变量在尝试显示之前存在。嵌套方法是确保每个片段都存在的唯一方法。有一些功能可以让它看起来更漂亮,但这是另一个问题的主题。
<cfset YouTubeXml = xmlParse( YouTubeFavourites.FileContent ) />
<cfset group = XmlSearch( YouTubeXml, "//media:group" ) />
<cfoutput>
<cfloop from="1" to="25" index="i">
<cfif StructKeyExists( Group, i )
AND StructKeyExists( Group[ i ], 'media:thumbnail' )
AND StructKeyExists( Group[ i ][ 'media:thumbnail' ], i )
AND StructKeyExists( Group[ i ][ 'media:thumbnail' ][ i ], 'url' )>
#group[i]['media:thumbnail'][i]['url']#
</cfif>
</cfloop>
</cfoutput>
我觉得您使用 i
很奇怪变量名中有两次,但我不熟悉 Youtube API,所以这可能是正确的。
我在您的代码中更改了两处不需要的内容。我删除了额外的 ##
签到 xmlParse()
因为它已经在那里被视为变量。我也移动了<cfoutput>
退出循环,因为声明 <cfoutput>
会导致轻微的性能损失多次。
关于xml - Coldfusion - 检查 XmlNode 是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15361500/