2012-04-25 55 views
1

我有以下代碼。錯誤與CFLoop當條目丟失

<cfoutput> 
<cfxml variable="eating"> 
<catalog> 
<results>10</results> 
<food id="bk101"> 
<initials>BK</initials> 
<keywords>Burger King, pie, hamburgers, fries, milkshakes</keywords> 
</food> 
<food id="bk102"> 
<initials>TB</initials> 
<keywords>Taco Bell, tacos, churros, burrito, gorditas</keywords> 
</food> 
<food id="bk103"> 
<keywords>Pizza Hut, pizza, cheese, garlic bread</keywords> 
</food> 
<food id="bk104"> 
<initials>CFA</initials> 
<keywords>Chick-Fil-A, chicken, chicken wrap, sauce, Bananas Pudding Milkshake</keywords> 
</food> 
<food id="bk105"> 
<initials>PE</initials> 
<keywords>Panda Express, rice, egg rolls, general tso</keywords> 
</food> 
<food id="bk106"> 
<initials>SJ</initials> 
<keywords>Sakura Japan, rice, spring rolls, bento</keywords> 
</food> 
<food id="bk107"> 
<keywords>Five Guys, fries, burgers, hot dogs</keywords> 
</food> 
<food id="bk108"> 
<initials>TN</initials> 
<keywords>Tandoori Nights, biryani, chicken, egg rolls</keywords> 
</food> 
<food id="bk109"> 
<initials>HoK</initials> 
<keywords>House of Kabob, rice, bread, beef kabaob, chicken kabob</keywords> 
</food> 
<food id="bk110"> 
<initials>BF</initials> 
<keywords>Baja Fresh, quesadilla, soft taco, chili con queso</keywords> 
</food> 
</catalog> 
</cfxml> 


<cfset data = queryNew("id,initials,keywords","integer,varchar,varchar")> 
<cfloop index="x" from="1" to="#eating.catalog.results.xmlText#"> 
<cfset queryAddRow(data)> 
<cfset querySetCell(data,"id",x)> 
<cfset querySetCell(data,"initials","#eating.catalog.food[x].initials#")> 
<cfset querySetCell(data,"keywords","#eating.catalog.food[x].keywords#")> 
</cfloop> 
</cfoutput> 

<cfoutput query="data"> 
#id# - <b>#initials#</b> #keywords#<br /> 
</cfoutput> 

您會注意到XML Feed中元素3和元素7的初始標記缺失。如果將initials標籤添加到元素3和7的XML中,則代碼運行得非常漂亮。但是,由於它們丟失了,這會導致CFLoop拋出一個錯誤。

我想什麼做的是省略元素3(和所有其他條目引起的誤差)從我的結果,並避免任何錯誤的展示,以便應用結果表明,像這樣

1 - BK漢堡王,餡餅,漢堡包,薯條,奶昔

2 - TB塔可鍾,玉米餅,churros,捲餅,gorditas

4 - CFA福來雞,雞肉,雞肉卷,醬,香蕉布丁奶昔

5 - PE Panda Express,ri CE,蛋卷,一般TSO

6 - SJ櫻日本,水稻,春捲,盒飯

8 - TN唐·夜,布瑞雅尼,雞,蛋卷

9 - Kabob的學樓,米飯,麪包,牛肉kabaob,雞肉kabob

10 - BF Baja Fresh的,油炸玉米餅,玉米餅軟,辣椒CON克索

以上飼料是一個簡單的例子,我實際的飼料有數百個元素。考慮到這一點,我怎麼能省略任何給我一個錯誤的元素,同時還包括那些元素呢?

+2

你可以嘗試測試,如果是'定義()'第一次,在設置單元格之前 – Henry 2012-04-25 18:20:02

+0

亨利 - 我試過但不成功 – Mike 2012-04-25 18:35:14

回答

4

Mike,我將所有代碼複製到本地腳本中以運行快速測試。我做了一個小的修改您的CFLOOP代碼,正要得到輸出,沒有錯誤(加入條件評估結構,確保重點與structKeyExists存在):

<cfloop index="x" from="1" to="#eating.catalog.results.xmlText#"> 
    <cfif structKeyExists(eating.catalog.food[x],"initials")> 
     <cfset queryAddRow(data)> 
     <cfset querySetCell(data,"id",x)> 
     <cfset querySetCell(data,"initials", eating.catalog.food[x].initials)> 
     <cfset querySetCell(data,"keywords", eating.catalog.food[x].keywords)> 
    </cfif> 
</cfloop> 

這是我收到的輸出在我的瀏覽器:

1 - BK漢堡王,餡餅,漢堡包,薯條,奶昔

2 - TB塔可鍾,玉米餅,churros,捲餅,gorditas

4 - CFA福來雞,雞肉,雞肉包,醬,香蕉布丁奶昔

5 - PE熊貓明確,稻,蛋卷,一般TSO

6 - SJ櫻日本,水稻,春捲,盒飯

8 - TN唐·夜,布瑞雅尼,雞,蛋卷

9 - kabob,米飯,麪包,牛肉kabaob,雞肉kabob的學樓

10 - BF Baja Fresh的,油炸玉米餅,玉米餅軟,辣椒CON克索

+0

地獄是啊,這工作很好!非常感謝,真的很感謝它!!!!!喲,關閉我的申請工作! :) – Mike 2012-04-25 19:14:48

+2

甜!很高興它的工作,並感謝Leigh的編輯,很好地清理了cfif語句。 – 2012-04-25 19:26:54