SSIS中Foreach迴圈容器處理XML資料
上一篇文章 在SSIS 中使用 Web Service 以及 解析XML 資料 中介紹了使用SSIS的WebService控制元件解析XML資料,最後也提到對於返回的XML數含有陣列型別的時候需要一點額外的處理。
示例說明
WeatherWebService 是WebXml.com.cn 天氣預報 Web 服務,資料每2.5小時左右自動更新一次,準確可靠。包括 340 多箇中國主要城市和 60 多個國外主要城市三日內的天氣預報資料。
我們可以通過這個服務的介面獲得我們需要的城市或地區的天氣等資訊。本示例將介紹在SSIS中用Web服務任務元件呼叫天氣預報Web服務的介面查詢城市的天氣等資訊,因為返回XML格式的資料含有陣列,所以用Foreach迴圈容器元件的NodeList列舉器來處理,獲取我們需要的資訊插入到資料庫的表。
實現步驟
HTTP連線
Web服務任務
拖入Web服務任務元件,開啟編輯器,在常規面板中,HttpConnection連線選擇上一步新建的Http連線,WSDLFile為自己新建的一個wsdl格式的檔案,OverwriteWSDLFile為True.點選【下載WSDL】。
切換到輸入面板,Method中選擇getWeatherbyCityName,然後下面出現的變數裡填一個城市名稱,當然也可以用變數。
切換到輸出面板,這裡,我們將返回的XML格式的資料儲存到一個Object型別的變數裡。這樣Web服務任務元件就設定好了。
返回資料說明
到WeatherWebService網站上檢視getWeatherbyCityName的呼叫說明:
根據城市或地區名稱查詢獲得未來三天內天氣情況、現在的天氣實況、天氣和生活指數
呼叫方法如下:輸入引數:theCityName = 城市中文名稱(國外城市可用英文)或城市程式碼(不輸入預設為上海市),如:上海 或 58367,如有城市名稱重複請使用城市程式碼查詢(可通過 getSupportCity 或 getSupportDataSet 獲得);返回資料: 一個一維陣列 String(22),共有23個元素。
String(0) 到 String(4):省份,城市,城市程式碼,城市圖片名稱,最後更新時間。String(5) 到 String(11):當天的 氣溫,概況,風向和風力,天氣趨勢開始圖片名稱(以下稱:圖示一),天氣趨勢結束圖片名稱(以下稱:圖示二),現在的天氣實況,天氣和生活指數。String(12) 到 String(16):第二天的 氣溫,概況,風向和風力,圖示一,圖示二。String(17) 到 String(21):第三天的 氣溫,概況,風向和風力,圖示一,圖示二。String(22) 被查詢的城市或地區的介紹
可以看到返回的是一個一維陣列。
我們將用迴圈處理這個一維陣列,然後獲得我們需要的欄位,比如省份,城市,城市程式碼,最後更新時間,當天氣溫,概況,風向和風力,現在的天氣實況,天氣和生活指數。
Foreach迴圈容器
在控制流中拖入Foreach迴圈容器,雙擊開啟編輯器,在集合面板中,Enumerator選擇Foreach NodeList 列舉器,DocumentSourceType為輸入的XML資料儲存型別,這裡選擇上一步的儲存XML資料的變數,DocumentSource為變數名稱。
EnumerationType選擇NodeText,因為這裡我們想要的是XML資料中標籤中的值,不是節點。OuterXPathStringSourceType是XPath查詢的型別,這裡我們選DirectInput,然後OuterXPathString是我們查詢XML的節點語法,這裡填/ArrayOfString/*,它表示查詢XML資料中的ArrayOfString這個節點下的所有節點,具體的XPath語法可以參考XPath 教程。
切換到變數對映面板,這裡新建一個變數儲存每次迴圈取到節點的時候,節點裡的值。這樣,Foreach迴圈容器設定就完成了。
資訊輸出
為方便演示,我就不連線資料庫了,把獲取到的資訊顯示出來就好了。將一個指令碼任務拖入到Foreach迴圈容器裡面。雙擊開啟編輯器,指令碼型別這裡用的VBA,然後新建了連個變數:ID,InfoStr,ID是每次迴圈的下標值,依次加1,InfoStr儲存組合成的資訊值。然後在ReadWriteVariables裡新增進來。點選【編輯指令碼】,開啟指令碼編輯器,輸入處理程式碼。
最後將組合資訊字串輸出,還是拖入一個指令碼任務,編輯器設定如下:
最後執行包任務,可以看到輸出的資訊。