ColdFusion - como percorrer a saída XML e adicionar a struct ou array?

Eu estou tentando criar uma lista de Capitrizes e suas respectivas posições. Os dados são provenientes de uma série de pares de chave / valor XML acessados ​​via serviço da Web (Chave: Nome_de_ID, Valor: Membro Joe. Chave: Nome_da_Posição, Valor: Presidente e assim por diante.) Cada responsável por um determinado capítulo possui seus próprios Position_Name.

A API com a qual estou trabalhando retornará apenas um objeto inteiro, portanto, configurei uma matriz para converter o nome XML e manter tudo:

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

Meu pensamento era percorrer esse array e, para cada instância da chave Member_Name e Position_Name, adicionar os valores a uma estrutura:

<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 estrutura dá-me uma pequena tabela agradável com o nome de uma pessoa, a posição dessa pessoa e seu termo - mas apenas aquele (que passa a ser a última entrada no arquivo XML). Mesmo adicionando i = i + 1 não tem nenhum efeito - é quase como se o loop estivesse começando no final e não continuasse.

Eu tentei outras maneiras de adicionar coisas à estrutura, quefaz percorra tudo, mas os pares chave / valor saem em uma ordem não relacionada. Eu sei que as estruturas não são ordenadas de qualquer maneira, mas eu preciso ter alguma maneira de sequenciar os dados da saída XML. Eu também tentei vários outros loops, tentando adicionar uma série de pequenas estruturas como essa a um array. Funcionou, mas de novo, apenas para aquela pessoa - nenhum "looping" real parecia acontecer! Eu posso ver todas as informações que preciso, tudo ao mesmo tempo - então talvez seja colocando tudo em ordem para que eu esteja fazendo algo errado?

Obrigado a todos antecipadamente, agradeço quaisquer sugestões ou sugestões na direção certa!

UPDATE: não sei se isso ajuda, mas só agora eu troquei os valores de To e From no loop que estou usando, e defini o passo para -1, e isso me deu a PRIMEIRA pessoa na lista. Mas ainda não deu um loop.

ATUALIZAÇÃO: Obrigado Peter, aqui está um exemplo do XML com o qual estou trabalhando:

<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>

Repete para cada oficial de capítulo no arquivo.

ATUALIZAÇÃO: aqui está o código que eu criei. Faz o que eu quero, mas há maneiras muito melhores de fazer isso, tenho certeza ...

Primeiramente eu obtenho os resultados da resposta SOAP, "drill down" para o nível que eu preciso e, em seguida, retiro o material específico do xml e coloco os dados em um array utilizável:

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

Então

<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>

Eu faço algum outro processamento, verificando a existência de variáveis, etc., e então imprimo os nomes dos Oficiais e suas respectivas posições com

<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>

Consegui adicionar Member_Guid ao array e utilizá-lo para que os visitantes do site possam clicar no nome de uma pessoa para ver mais detalhes (empresa, endereço de email, etc.). E é sobre isso! O que você acha? Mais uma vez, muito obrigado por tomar o tempo, eu realmente aprecio isso!

questionAnswers(2)

yourAnswerToTheQuestion