Это не так просто.
Прежде всего, имейте в виду, что SSIS «выравнивает» XML так, что для каждого пути через XML существует один выход из источника XML. Тривиальным примером является то, что
<Parent><Child><Grandchild/></Child></Parent>
выдаст три выхода и три выхода с ошибкой. Становится хуже:
<Parent><Child><Grandchild><Notes/></Grandchild><Notes/></Child><Notes/></Parent>
Это приведет к выводам Parent, Child, Grandchild, Parent-Child-Grandchild-Notes, Parent-Child-Notes и Parent-Notes, как нормальным, так и ошибочным.
Проект, над которым я работал, начинал с 203 результатов. Я был в состоянии сгладить схему XML и произвести только 19 или около того. Это все еще много, учитывая, что каждый вывод должен иметь свою собственную обработку.
Кроме того, задача XML не может обрабатывать 1 ГБ или более XML. Он действительно загружает весь документ в память. Попробуйте создать XmlDocument.Load для такого файла и посмотрите, что происходит - вот что происходит с SSIS.
Мне пришлось создать собственный «Источник элементов XML», который обрабатывал дочерние элементы корневого элемента по одному. Это позволило мне сгладить XML, а также обрабатывать большие документы (сработал тестовый документ объемом 10 ГБ).
Там больше веселья в зависимости от того, что вы хотите сделать с полученными данными. В моем случае мы должны были отправить каждый из результатов в промежуточные таблицы. Это неплохая вещь, но вы должны понимать, что данные на выходах асинхронны. Один дочерний элемент (с потомками) будет постепенно достигать конца выходных путей, и вы никогда не узнаете, когда все потомки закончили обработку. Это делает невозможным обработку на транзакционной основе по одному элементу за раз.
Вместо этого SSIS добавляет суррогатный ключ (я думаю, именно так он и называется) к каждому дочернему элементу. Будет добавлен ParentID к родителю, ChildID к ребенку и ChildParentID также добавлен к ребенку, чтобы ссылаться на родителя ребенка. Их можно использовать, чтобы «снова собрать элемент вместе», но только после того, как все данные закончат запись в промежуточные таблицы. Это единственный раз, когда вы можете быть уверены, что любой данный элемент был обработан полностью - когда они все имеют!