2010-06-15 10 views
0

Je jouais sur onError, donc j'ai essayé de créer une erreur en utilisant un grand objet document xml. Je pensais obtenir une erreur parce que j'ai supprimé la structure que je référençait.structDelete n'affecte pas la copie superficielle?

De LiveDocs:

Affectation variable - Crée une référence supplémentaire ou alias, à la structure . Toute modification apportée aux données en utilisant un nom de variable modifie la structure à laquelle vous accédez en utilisant le nom de la variable . Cette technique est utile lorsque vous souhaitez ajouter une variable locale à une autre étendue ou sinon modifier la portée d'une variable sans en supprimant la variable de l'étendue d'origine .

au lieu j'ai eu

580df1de-3362-ca9b-b287-47795b6cdc17

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

... ... . ..

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

57e57e28-e044-6119-afe2-aebffb549342

12805 fois en boucle 297 millisecondes

<cfdump var = "#variables#"> 

montre qu'il n'y a rien dans la structure, juste parsedXML.xmlRoot.xmlName avec la valeur de XMLRootElement . J'ai aussi essayé

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

ainsi que structClear pour les deux.

Plus d'informations sur la suppression de l'objet document xml. http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-78e3.html

Quelqu'un peut-il expliquer ma logique défectueuse? Merci.

+0

Si vous pouvez fournir un plus simple, exemple de code exécutable qui serait grand. En outre, essayez le même code avec l'erreur onError, juste sur une page CFML normale, donne-t-il toujours les mêmes résultats? –

+0

Um, je peux essayer, mais il est construit sur des données réelles à partir d'un fichier XML, sauf que j'ai changé les noms des éléments pour protéger les données. c'est une page CFML normale. onError est dans l'application.cfm page et ne pas être déclenché comme je l'attendrait à @ Travis

Répondre

2

Les types de données XML sont une combinaison de structures et de tableaux. Contrairement aux structures, les tableaux de CF passent par valeur et non par référence et peuvent être ce que vous voyez.

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

+0

Cela a du sens et c'est probablement la réponse . Est-ce que quelqu'un sait pourquoi je reçois ces résultats pour "parsedXML.XMLRootElement.XMLChildElement?" isArray: NON isStruct: NON isObject: NON isQuery: NON isSimpleValue: NO isXML: OUI isXMLDoc: NON isXMLElem: OUI isXMLNode: OUI isXMLRoot: NON structKeyExists: OUI arrayLen: 12804. isArray et isStruct sont tous deux maintenant mais structKeyExists est yes et et arrayLen a une valeur et il copie par valeur comme un tableau? – Travis

+0

oh, nevermind: Le tableau suivant répertorie les fonctions de tableau et de structure ColdFusion que vous pouvez utiliser pour gérer les objets de document XML et leurs fonctions, et décrit leurs utilisations courantes. Dans plusieurs cas, vous pouvez utiliser une fonction de tableau ou une fonction de structure dans un but précis, par exemple pour supprimer tous les attributs ou les enfants d'un élément. – Travis

Questions connexes