2010-06-15 94 views
0

我在玩onError,所以我試圖用一個大的XML文檔對象創建一個錯誤。structDelete不影響淺拷貝?

<cfset XMLByRef = variables.parsedXML.XMLRootElement.XMLChildElement> 
<cfset structDelete(variables.parsedXML, "XMLRootElement")> 
<cfset startXMLShortLoop = getTickCount()> 
<cfloop from = "1" to = "#arrayLen(variables.XMLByRef)#" index = "variables.i"> 
    <cfoutput>#variables.XMLByRef[variables.i].id.xmltext#</cfoutput><br /> 
</cfloop> 
<cfset stopXMLShortLoop = getTickCount()> 

我希望得到一個錯誤,因爲我刪除了我引用的結構。

從LiveDocs中:

變量賦值 - 創建一個 附加參考或別名,對 結構。使用一個變量名稱對數據進行的任何更改 使用一個變量名稱會更改您使用 其他變量名稱訪問的 結構。這種技術時,要在本地 變量添加到另一個範圍或 有用的,否則 變化的變量的作用域不 刪除從 原來的範圍變量。

,而不是我

580df1de-3362-ca9b-b287-47795b6cdc17

25a00498-0f68-6f04-a981-56853c0844ed

... ... 。 ..

db49ed8a-0ba6-8644-124a-6d6ebda3aa52

57e57e28-e044-6119-afe2-aebffb549342

毛圈絨12805在297毫秒

<cfdump var = "#variables#"> 

顯示有沒有在結構,只是parsedXML.xmlRoot.xmlName與XmlRootElement將價值。 我也試過

<cfset structDelete(variables.parsedXML.XMLRootElement, "XMLChildElement")> 

以及structClear for both。

有關從xml文檔對象中刪除的更多信息。 http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-78e3.html

有人可以請解釋我的錯誤邏輯嗎?謝謝。

+0

如果你能提供一個更簡單,可運行的代碼示例將是巨大的。另外,只需在普通的CFML頁面上嘗試使用與onError相同的代碼,它是否仍然提供相同的結果? – 2010-06-15 14:12:58

+0

嗯,我可以嘗試,但它建立在xml文件的實際數據上,除了我更改了保護數據的元素名稱。 這是一個正常的CFML頁面。 onError在應用程序中。cfm頁面,而不是像我期望的那樣被觸發@@ cfloop from =「1」to =「#arrayLen(variables.XMLByRef)#」index =「variables.i」> – Travis 2010-06-15 17:17:12

回答

2

XML數據類型是結構和數組的組合。與結構不同,CF中的數組將通過值傳遞,而不是通過引用,可能是您所看到的。

http://www.coldfusionjedi.com/index.cfm/2009/5/1/ColdFusion-and-Pass-by-Reference-versus-Value

+0

這樣做有道理,它可能是答案。有誰知道爲什麼我得到這些結果爲「parsedXML.XMLRootElement.XMLChildElement?」 isArray:NO isStruct:NO isObject:NO isQuery:NO isSimpleValue:NO isXML:YES isXMLDoc:NO isXMLElem:YES isXMLNode:YES isXMLRoot:NO structKeyExists:YES arrayLen:12804. isArray和isStruct都是現在,但structKeyExists是yes和arrayLen有一個值,它像數組一樣按值複製? – Travis 2010-06-15 22:37:00

+0

oh,nevermind:下表列出了可用於管理XML文檔對象及其功能的ColdFusion陣列和結構函數,並描述了它們的常見用途。在某些情況下,您可以使用數組函數或結構函數來實現某種目的,例如刪除所有元素的屬性或子元素。 – Travis 2010-06-15 23:07:23