2012-08-04 68 views
1

我需要建立一個頁面,列出給定委員會的每個委員會成員,他們的職位,他們的電子郵件和電話號碼。這些數據通過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#的值,否則不應該發生該結構循環。任何創建的結構應該只包含我分配給它的鍵/值對。

但這並不是所發生的一切。我很確定我正在使這種方式比實際情況更復雜,但它確實讓我難堪。我會大大欣賞任何提示,建議,建議,指針 - 非常感謝你所有提前的幫助!

+0

只有一半人讀過這個,但聽起來你需要一個''''ArrayAppend'(仍然在cfif裏面)重新設置結構,否則舊數據會在周圍發生並導致奇怪。 (此外,您不需要結構定義中的散列。) – 2012-08-06 23:43:05

回答

0

如果有人有興趣,我可以通過將包含查詢的SOAP信封分爲兩部分,在兩個不同的頁面上得到一個工作解決方案。

第一個信封查詢委員會信息(成員名稱,ID,位置),並在生成的XML上循環加載多維數組,然後將其保存爲會話變量。然後帶我到另一個頁面,我從中獲取單個數據(第二個表,電子郵件,電話的ID),並創建第二個多維數組。

每個表格以不同的順序(當然)輸出其信息,所以我然後循環兩個數組並根據ID對它們進行排序。然後我再循環它們以輸出到頁面。

我最終列出了一張名字,位置,電子郵件和電話號碼。它有效,但是很頭疼!當然,還有更好的方法可以做到這一點...