我需要建立一個頁面,列出給定委員會的每個委員會成員,他們的職位,他們的電子郵件和電話號碼。這些數據通過XML webservice公開。一個表格包含委員會數據(會員名稱,職位),另一個表格包含個人數據(電子郵件,電話)。我嘗試使用連接在單個查詢中獲取數據,但API顯然不支持這一點。它確實提供了一種「MultiQuery」方法,可以運行多個不連續的查詢,所以這就是我正在使用的方法。ColdFusion - 處理來自兩個同時XML查詢的結果?
我之前問過一個similar question,實際上它使用相同的XML和相同的常規設置。彼得Boughton和其他人是非常有幫助的,他們的建議工作很好。當時和現在的區別是,那麼我只需要委員會的數據。現在我需要委員會和個人數據,這就是我被卡住的地方。
來自兩個查詢的結果分爲兩部分 - 一個對象,但兩個「ArrayOfanyType」部分。這兩個「部分」被分解,幷包含在單個陣列:
<cfset keyValue = xmlSearch(soapBody,"//*[local-name()='KeyValueOfstringanyType']") />
我可以使用蠻力的方法來遍歷這個數組將數據添加到一個結構:
<cfloop index="i" from="1" to="#arrayLen(keyValue)#">
<cfif keyValue[i].Key.xmlText EQ 'Member_Name'>
<cfset memberName = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ 'Position_Name'>
<cfset positionName = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ 'Member_Guid'>
<cfset memberGuid = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ 'Employer__c'>
<cfset employer = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ 'Primary_EmailAddress_EmailAddress'>
<cfset email = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ '_Default_PhoneNumber_PhoneNumber'>
<cfset phone = keyValue[i].Value.xmlText>
</cfif>
<cfset chapterOfficer = {
aName = #memberName#,
bPositionName = #positionName#,
cMemberGuid = #memberGuid#,
dCompany = #employer#,
eEmail = #email#,
fPhone = #phone#
} />
</cfloop>
其中一期工程非常適合單個成員。傾銷「章節職員」給我我需要的一切。我的想法是建立一堆結構的每個官員,並放置在一個數組,chapterOfficers,我會然後依次通過建立我的頁面:
<cfif structKeyExists(chapterOfficer, "aName")>
<cfset arrayAppend(chapterOfficers, chapterOfficer)>
</cfif>
我把這個代碼在隨後結束的結構創造者,就在循環結束之前。我不理解結果,因爲它將8500個結構放在陣列中。一些結構沒有條目,有些是部分條目,有些是重複以前的條目,有些有一個官員的電子郵件,另一個是電話 - arrgghh!我試圖做的是,對於循環的每次迭代,測試我的頁面所需的鍵/值對的存在性,將它們添加到新創建的結構中,然後將該結構添加到現有數組中。
在我正在使用的XML結果中確實有成千上萬行,但只有10名官員。我不確定爲什麼會創建8500個奇怪的結構 - 除非存在關鍵字「aName」,否則不應該將結構添加到數組中,除非在給定的任何給定的pass上定義了#memberName#的值,否則不應該發生該結構循環。任何創建的結構應該只包含我分配給它的鍵/值對。
但這並不是所發生的一切。我很確定我正在使這種方式比實際情況更復雜,但它確實讓我難堪。我會大大欣賞任何提示,建議,建議,指針 - 非常感謝你所有提前的幫助!
只有一半人讀過這個,但聽起來你需要一個' '''ArrayAppend'(仍然在cfif裏面)重新設置結構,否則舊數據會在周圍發生並導致奇怪。 (此外,您不需要結構定義中的散列。) –
2012-08-06 23:43:05