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

本贴最后更新于 3285 天前,其中的信息可能已经时异事殊

上一篇文章 在 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

转载请注明出处(http://www.c-xuan.com/SSIS-XMLTask-ProcessArrays)

  • SSIS
    2 引用 • 3 回帖
  • BI
    5 引用 • 6 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 636 关注
  • OneDrive
    2 引用
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 547 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 10 关注
  • sts
    2 引用 • 2 回帖 • 230 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    188 引用 • 319 回帖 • 251 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 223 关注
  • CodeMirror
    2 引用 • 17 回帖 • 162 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 3 关注
  • Anytype
    3 引用 • 31 回帖 • 16 关注
  • Visio
    1 引用 • 2 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 1 关注
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖 • 1 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 451 关注
  • 反馈

    Communication channel for makers and users.

    121 引用 • 907 回帖 • 273 关注
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖 • 1 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 34 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 4 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 812 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 3 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 636 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 31 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖