上一篇,我们讲到了通过Web服务任务将异构系统中的数据保存为一个XML文件。它们看起来是这样
但问题在于,我们如何处理该XML文件,并将其提交到我们的数据库中去呢?我们这一篇文章会用到XML任务和XML源对其进行转换和加载
1. 首先,拖拽一个“XML任务”到控制流中,并且设置好它与“Web服务任务”的优先约束
2. 编辑该任务(右键=》“编辑”
XML任务是很强大的,它可以做如下的事情
- 验证文档
- 比较文档
- 合并文档
- 转换文档
- 查找数据或者运算
这五个操作分别就对应了几个不同的OperationType
我们这里选择XSLT,因为我们想对数据进行一些转换,现在下载下来的数据太复杂了:有命名空间,而且有很多没必要的元素。
在继续操作之前,我们需要准备一个XSLT文件。
3. 编写一个XSLT文件
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" ><!--这里添加一个特殊的命名空间,因为来源XML文件中有这个名称--> <xsl:output method="xml" indent="yes"/><!--我们仍然输出为XML--> <xsl:template match="/DataSet/diffgr:diffgram/NewDataSet"> <Employees><!--这是我们自定义输出文档里面的根元素--> <xsl:for-each select="Employees"> <!--循环/DataSet/diffgr:diffgram/NewDataSet下面所有的Employees元素--> <Employee> <ID> <xsl:value-of select="ID"/> </ID> <Name> <xsl:value-of select="Name"/> </Name> <Gender> <xsl:value-of select="Gender"/> </Gender> <WorkYears> <xsl:value-of select="WorkYears"/> </WorkYears> <Group> <xsl:value-of select="Group"/> </Group> </Employee> </xsl:for-each> </Employees> </xsl:template> </xsl:stylesheet>
将该文件保存到一个目录,例如E:\Temp目录
4. 使用该文件对Employee.XML进行转换。
我们回到SSIS包的设计器中。
【注意】Source这里设置的是数据来源文件
将“SaveOperationResult”设置为true
展开“OperationResult”这个节点
设置Destination
点击“确定”
在“第二操作数”处,选择“SecondOperatedType”为文件连接,并选择SecondOperand为“Employee.xslt”。其实就是我们的转换文件
点击“确定”
5. 调试该任务。选中它,右键,执行任务
6. 检查输出文件。我们可以去打开那个Output.xml。这个文件显然更加易于理解和处理了
结语:这一篇,我们通过XML任务对一个XML数据文件进行了转换。那么怎么把这个数据最终提交打数据库去呢?下一篇将介绍使用XML源来实现该需求