在SSIS中处理XML数据通常离不开XML源和XML任务两个组件。XML源负责在数据流中将XML文档解析为关系型行集,而XML任务则在控制流中对XML文档执行校验、转换、查询等操作。掌握它们的配置方式,能够解决大部分以XML为载体的数据集成需求。

XML源的基本使用方法
XML源位于数据流选项卡中,用于将XML文件或变量中的XML内容转换为表格数据。使用前通常需要准备一个XSD架构文件来描述XML结构。
配置步骤
- 在数据流中拖入XML源,双击打开编辑器。
- 选择XML文档位置,可以是文件连接、变量或HTTP连接。
- 指定XSD架构文件,用于定义节点与列的映射关系。
- 在“列”页面中勾选需要输出的节点字段。
示例:从XML文件读取数据
假设有一个books.xml文件,结构如下:
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>
<id>1</id>
<title>SSIS实战</title>
<price>59.00</price>
</book>
<book>
<id>2</id>
<title>XML入门</title>
<price>39.00</price>
</book>
</books>
对应的XSD片段可以这样写:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
配置好XML源后,就可以将输出连接到目标表或后续转换组件。
XML任务的常见操作
XML任务运行在控制流中,不需要进入数据流。它支持校验、XSLT转换、XPath查询、合并等操作类型。
使用XML任务执行XPath查询
可以将XML文档中满足条件的数据提取出来,保存为新的XML文件。下面是通过C#脚本调用XmlDocument完成类似XPath提取的逻辑,便于理解XML任务背后的原理:
using System;
using System.Xml;
class Program
{
static void Main()
{
// 加载XML文档
XmlDocument doc = new XmlDocument();
doc.Load("books.xml");
// 执行XPath查询,选取价格大于40的书籍标题
XmlNodeList nodes = doc.SelectNodes("/books/book[price > 40]/title");
foreach (XmlNode node in nodes)
{
Console.WriteLine(node.InnerText);
}
}
}
在SSIS中配置XML任务
- 在控制流拖入XML任务,设置OperationType为XPath。
- 指定源XML文件和目标文件连接。
- 在XPathOperation中填写表达式,例如
/books/book/title。 - 运行包后,目标文件会包含查询结果。
二者配合的典型场景
实际项目中,常先用XML任务对原始XML做校验或裁剪,再用XML源把处理过的XML导入数据仓库。例如每天接收第三方提供的订单XML,先使用XML任务剔除无效节点,再由XML源写入临时表,最后在数据仓库中做清洗。
| 组件 | 所在流 | 主要作用 |
|---|---|---|
| XML源 | 数据流 | 将XML解析为行集 |
| XML任务 | 控制流 | 校验、转换、查询XML |
只要理清XML结构与目标表之间的映射,并善用XSD架构,就能在SSIS中稳定地处理各类XML数据集成任务。