No results found

【SSIS】中Foreach循环容器处理XML数据

上一篇文章 在SSIS 中使用 Web Service 以及 解析XML 数据 中介绍了使用SSIS的WebService控件解析XML数据,最后也提到对于返回的XML数含有数组类型的时候需要一点额外的处理。

示例说明

WeatherWebService 是WebXml.com.cn 天气预报 Web 服务,数据每2.5小时左右自动更新一次,准确可靠。包括 340 多个中国主要城市和 60 多个国外主要城市三日内的天气预报数据。

SSIS-XMLTask-ProcessArrays-1.jpg

我们可以通过这个服务的接口获得我们需要的城市或地区的天气等信息。本示例将介绍在SSIS中用Web服务任务组件调用天气预报Web服务的接口查询城市的天气等信息,因为返回XML格式的数据含有数组,所以用Foreach循环容器组件的NodeList枚举器来处理,获取我们需要的信息插入到数据库的表。

实现步骤

HTTP连接

首先我们建立一个HTTP连接,服务器URL如下:
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

SSIS-XMLTask-ProcessArrays-2.jpg

Web服务任务

拖入Web服务任务组件,打开编辑器,在常规面板中,HttpConnection连接选择上一步新建的Http连接,WSDLFile为自己新建的一个wsdl格式的文件,OverwriteWSDLFile为True.点击【下载WSDL】。

SSIS-XMLTask-ProcessArrays-3.jpg

切换到输入面板,Method中选择getWeatherbyCityName,然后下面出现的变量里填一个城市名称,当然也可以用变量。

SSIS-XMLTask-ProcessArrays-4.jpg

切换到输出面板,这里,我们将返回的XML格式的数据保存到一个Object类型的变量里。这样Web服务任务组件就设置好了。

SSIS-XMLTask-ProcessArrays-5.jpg

返回数据说明

到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) 被查询的城市或地区的介绍

可以看到返回的是一个一维数组。

SSIS-XMLTask-ProcessArrays-6.jpg

SSIS-XMLTask-ProcessArrays-7.jpg

我们将用循环处理这个一维数组,然后获得我们需要的字段,比如省份,城市,城市代码,最后更新时间,当天气温,概况,风向和风力,现在的天气实况,天气和生活指数。

Foreach循环容器

在控制流中拖入Foreach循环容器,双击打开编辑器,在集合面板中,Enumerator选择Foreach NodeList 枚举器,DocumentSourceType为输入的XML数据存储类型,这里选择上一步的保存XML数据的变量,DocumentSource为变量名称。

EnumerationType选择NodeText,因为这里我们想要的是XML数据中标签中的值,不是节点。OuterXPathStringSourceType是XPath查询的类型,这里我们选DirectInput,然后OuterXPathString是我们查询XML的节点语法,这里填/ArrayOfString/*,它表示查询XML数据中的ArrayOfString这个节点下的所有节点,具体的XPath语法可以参考XPath 教程

SSIS-XMLTask-ProcessArrays-8.jpg

切换到变量映射面板,这里新建一个变量保存每次循环取到节点的时候,节点里的值。这样,Foreach循环容器设置就完成了。

SSIS-XMLTask-ProcessArrays-9.jpg

信息输出

为方便演示,我就不连接数据库了,把获取到的信息显示出来就好了。将一个脚本任务拖入到Foreach循环容器里面。双击打开编辑器,脚本类型这里用的VBA,然后新建了连个变量:ID,InfoStr,ID是每次循环的下标值,依次加1,InfoStr保存组合成的信息值。然后在ReadWriteVariables里添加进来。点击【编辑脚本】,打开脚本编辑器,输入处理代码。

SSIS-XMLTask-ProcessArrays-10.jpg

SSIS-XMLTask-ProcessArrays-11.jpg

最后将组合信息字符串输出,还是拖入一个脚本任务,编辑器设置如下:

SSIS-XMLTask-ProcessArrays-12.jpg

最后执行包任务,可以看到输出的信息。

SSIS-XMLTask-ProcessArrays-13.jpg

文章目录
  1. 1. 示例说明
  2. 2. 实现步骤
|