Допустим нужно реализовать приложение которое будет накапливать информацию о курсах валют ежедневно в нашей БД.
Воспользуемся веб сервисом для получения ежедневных данных.
1.создаем задачу Web Service
2.Настраиваем, соединение с WSDL файлом
3.Создаем локальный WSDL файл и жмем кнопку DOWNLOAD WSDL
4.Выбираем нужный нам метод
5. Настраиваем файл результатов xml
Итак мы получили данные от веб сервиса в виде xml файла, теперь немного теории XML
Для правильно чтения XML файла должен быть определен XSD файл, описывающий его структуру.
При использовании XSD файлов XML парсер может проверить не только правильность синтаксиса XML документа, но также его структуру, модель содержания и типы данных.
Схемы бывают внешние и внутренние, т.е которые определены внутри xml файла.
Плюс в документе для схемы могут быть заданы пространства имен описывающий именованную совокупность имён элементов и атрибутов, служащую для обеспечения их уникальности в XML-документе.
Возьмём, например, простой XML, который содержит ссылки на покупателя и на заказанный продукт. И элементы покупателя, и элементы продукта могут содержать дочерний элемент «ID_number». Ссылки на элемент ID_number будут, таким образом, неоднозначны, у нас будут два одинаковых имени элемента несущих разную смысловую нагрузку и так будет, пока мы не введём пространства имён для их различения.
Пространства имён объявляются с помощью XML атрибута
xmlns
, значение которого должно быть ссылкой URI.
Далее смотрим и анализируем наш файл, видим что схема описана внутри и указано несколько пространств имен.
Сразу скажу с такой схемой на нескольких пространствах имен у меня SSIS не заработал, XML source видел схему, но не видел данных.
Поэтому пришлось пойти другим путем , воспользоваться опцией XML TASK и сгенерировать xml файл с одним пространством имен.
Для этого воспользуемся задачей XML TASK, вообще у этой задачи гораздо больше возможностей подробней тут
Diff
|
Сравнивает два XML-документа. Операция Diff сравнивает исходный XML-документ в качестве основного со вторым XML-документом, находит различия между ними и записывает их в XML-документ Diffgram. Эта операция содержит свойства для настройки сравнения.
|
merge
|
Выполняет слияние двух XML-документов. Операция Merge берет исходный XML-документ в качестве основного и добавляет к нему содержимое второго документа. Можно задать место в основном документе, куда будут вставлены данные.
|
Patch
|
Добавляет в указанный в XML-документ выходной документ операции Diff (документ Diffgram), чтобы получился новый документ, включающий в себя содержимое документа Diffgram.
|
Validate
|
Проверяет соответствие XML-документа определению типа документа (DTD) или схеме XML (XSD).
|
XPath
|
Выполняет запросы и вычисления XPath.
|
XSLT
|
Выполняет преобразование XSL в XML-документах.
|
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no" />
<xsl:template match="/|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no" />
<xsl:template match="/|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
В результате преобразования у нас получится файл с одним пространством имен Modified_output.xml.
Теперь можно настроить Data flow для загрузки данных в базу.
Выбираем в качестве источника компонент XML Source, задаем наш новый Xml файл и генерируем для него схему.
Выбираем нужный нам результат, так как там он будет не один.
И создаем в базе таблицу для загрузки, жмем кнопку new
Запускаем наш пакет и видим что данные успешно загрузились в базу.
На этом все , немного юмора
Жена мужу: - Сходи в магазин и купи яиц... Муж: - У меня есть два яйца... Хватит? Жена : - А что их можно съесть? Он: - Съесть нельзя, а полизать можно! Она: - Ну и замечательно! Утром полижешь себе на завтрак:))