Coldfusion-检查XmlNode是否存在

Dou*_*las 3 xml coldfusion bluedragon

我一直在努力寻找解决方案。我的代码与我在Google搜索中看到的代码不同,并且我尝试过的任何方法都无法正常工作。基本上如标题所示,我想检查Xml Node是否存在。这是因为YouTube Feed中返回的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>
Run Code Online (Sandbox Code Playgroud)

基本上,该错误表明该错误#group[i]['media:thumbnail'][i]['url']#不存在。希望有人能帮忙。

Bus*_*hes 5

以下代码将在尝试显示变量之前进行检查,以确保该变量存在。嵌套方法是确保每一步都存在的唯一方法。有一些功能使其看上去更漂亮,但这是另一个问题。

<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>
Run Code Online (Sandbox Code Playgroud)

我发现您i在变量名称中使用了两次,这很奇怪,但是我对Youtube API并不熟悉,所以也许这是正确的。

我已经更改了代码中不需要的两件事。我删除了多余的##符号,xmlParse()因为它已经在那里被当作变量了。我也将其<cfoutput>移出循环,因为<cfoutput>多次声明会导致轻微的性能损失。