ColdFusion: ¿cómo hacer un ciclo a través de la salida XML y agregar a la estructura o matriz?

Estoy tratando de crear una lista de Oficiales de Capítulo y sus respectivas posiciones. Los datos provienen de una serie de pares de clave / valor XML a los que se accede a través del servicio web (Clave: Nombre del miembro, Valor: Miembro de Joe. Clave: Nombre de la posición, Valor: Presidente, etc.) Cada oficial de un capítulo dado tiene su propio nombre y miembro. Position_Name.

La API con la que estoy trabajando solo devolverá un objeto completo, así que configuro una matriz para convertir el nombre XML y mantener todo:

<cfset keyValue = xmlSearch(soapBody,"//*[local-name()='KeyValueOfstringanyType']") />

Mi pensamiento fue recorrer esa matriz, y para cada instancia de la clave Member_Name y Position_Name, agregue los valores a una estructura:

<cfset chapterOfficers=structNew()>
<cfloop index="i" from="1" to="#arrayLen(keyValue)#">
    <cfif keyValue[i].Key.xmlText EQ 'Member_Name'>
        <cfset chapterOfficers.Name=keyValue[i].Value.xmlText>
    </cfif>
    <cfif keyValue[i].Key.xmlText EQ 'Position_Name'>
        <cfset chapterOfficers.Position = keyValue[i].Value.xmlText>
    </cfif>
    <cfif keyValue[i].Key.xmlText EQ 'Term_Name'>
        <cfset chapterOfficers.Term = keyValue[i].Value.xmlText>
    </cfif>
</cfloop>

Dumping esta estructura me da una pequeña mesa agradable con el nombre de una persona, la posición de esa persona y su término, pero solo esa (que es la última entrada en el archivo XML). Incluso agregar i = i + 1 no tiene ningún efecto, es casi como que el bucle se inicia al final y no continúa.

He intentado otras formas de agregar cosas a la estructura, quehace&nbsp;recorra todo, pero los pares clave / valor salen en un orden no relacionado. Sé que las estructuras no están ordenadas de todos modos, pero necesito tener alguna forma de secuenciar los datos de la salida XML. También probé varios otros bucles, intentando agregar una serie de pequeñas estructuras como esta a una matriz. Funcionó, pero una vez más, solo para esa persona, ¡no se produjo ningún "bucle" real! Puedo ver toda la información que necesito, al mismo tiempo, así que, ¿tal vez es ponerla toda para que yo esté haciendo algo mal?

¡Gracias a todos por adelantado, aprecio cualquier sugerencia o empuje en la dirección correcta!

ACTUALIZACIÓN: no sé si esto ayuda, pero justo ahora cambié los valores de A y De en el ciclo que estoy usando, y puse el paso a -1, y me dio la PRIMERA persona en la lista. Pero aún así no se bucea.

ACTUALIZACIÓN: Gracias Peter, aquí hay un ejemplo del XML con el que estoy trabajando:

<b:KeyValueOfstringanyType>
                    <b:Key>Member_Guid</b:Key>
                    <b:Value i:type="d:string">006e1c09-25f9-4178-86de-13c3e63200ce</b:Value>
                 </b:KeyValueOfstringanyType>
                 <b:KeyValueOfstringanyType>
                    <b:Key>Member_Type</b:Key>
                    <b:Value i:type="d:string">Entity</b:Value>
                 </b:KeyValueOfstringanyType>
                 <b:KeyValueOfstringanyType>
                    <b:Key>Member_Name</b:Key>
                    <b:Value i:type="d:string">Member, Joe</b:Value>
                 </b:KeyValueOfstringanyType>
                 <b:KeyValueOfstringanyType>
                    <b:Key>Position_Guid</b:Key>
                    <b:Value i:type="d:string">02ae1c09-5779-4891-8cd1-05cf475cf5af</b:Value>
                 </b:KeyValueOfstringanyType>
                 <b:KeyValueOfstringanyType>
                    <b:Key>Position_Type</b:Key>
                    <b:Value i:type="d:string">CommitteePosition</b:Value>
                 </b:KeyValueOfstringanyType>
                 <b:KeyValueOfstringanyType>
                    <b:Key>Position_Name</b:Key>
                    <b:Value i:type="d:string">President</b:Value>
                 </b:KeyValueOfstringanyType>
                 <b:KeyValueOfstringanyType>
                    <b:Key>Term_Guid</b:Key>
                    <b:Value i:type="d:string">044e1c09-a90b-495f-891f-afa13e653dee</b:Value>
                 </b:KeyValueOfstringanyType>
                 <b:KeyValueOfstringanyType>
                    <b:Key>Term_Type</b:Key>
                    <b:Value i:type="d:string">CommitteeTerm</b:Value>
                 </b:KeyValueOfstringanyType>
                 <b:KeyValueOfstringanyType>
                    <b:Key>Term_Name</b:Key>
                    <b:Value i:type="d:string">2011-2012</b:Value>
                 </b:KeyValueOfstringanyType>

Se repite para cada oficial de capítulo en el archivo.

ACTUALIZACIÓN: aquí está el código que se me ocurrió. Hace lo que quiero que haga, pero hay formas mucho mejores de hacerlo, estoy seguro ...

Primero obtengo los resultados de la respuesta SOAP, "profundice" hasta el nivel que necesito, y luego elimino las cosas específicas de xml y obtengo los datos en una matriz utilizable:

<cfset soapBody = xmlParse(cfhttp.fileContent)>
<cfset soapBody = soapBody['s:Envelope']['s:Body'].QueryResponse.QueryResult.Objects.anyType.Fields />
<cfset keyValue = xmlSearch(soapBody,"//*[local-name()='KeyValueOfstringanyType']") />

Entonces

<cfset chapterOfficers=arrayNew(2)>
<cfset x=1>
<cfset y=1>

<cfloop index="i" from="1" to="#arrayLen(keyValue)#">
    <cfif keyValue[i].Key.xmlText EQ 'Member_Name'>
        <cfset memberName = keyValue[i].Value.xmlText>
        <cfset chapterOfficers[x][y]=#memberName#>
        <cfset y=y+1>
    </cfif>
    <cfif keyValue[i].Key.xmlText EQ 'Position_Name'>
        <cfset positionName = keyValue[i].Value.xmlText>
        <cfset chapterOfficers[x][y]=#positionName#>
        <cfset x=x+1>
        <cfset y=1>
    </cfif>
    <cfif keyValue[i].Key.xmlText EQ 'Member_Guid'>
        <cfset memberGuid = keyValue[i].Value.xmlText>
        <cfset chapterOfficers[x][3]=#memberGuid#>
    </cfif>
</cfloop>

Realizo otros procesos, verificando la existencia de variables, etc., y luego muestro los nombres de los oficiales y sus respectivas posiciones con

<cfloop from="1" to="#arrayLen(chapterOfficers)#" index="x">
    <p>
        <cfoutput><a href="OfficerDetail.cfm?sessionGuid=<cfoutput>#URL.sessionGuid#</cfoutput>&memberGuid=<cfoutput>#chapterOfficers[x][3]#</cfoutput>">#chapterOfficers[x][1]#</a></cfoutput><br />
        <cfoutput>#chapterOfficers[x][2]#</cfoutput><br />
    </p>
</cfloop>

Pude agregar Member_Guid a la matriz y usarla para que los visitantes del sitio puedan hacer clic en el nombre de una persona para ver más detalles (compañía, dirección de correo electrónico, etc.). ¡Y eso es todo! ¿Qué piensas? Nuevamente, muchas gracias por tomarse el tiempo, ¡realmente lo aprecio!