Как в SSIS перебирать XML внутри определенного элемента, используя XPATH в перечислителе Foreach NodeList

Я пытаюсь пройтись по XML-элементам входного XML-файла в SSIS. Для этого я пытаюсь использовать «Контейнер цикла по каждому элементу» с контейнером цикла по каждому элементу. Внутри контейнера цикла ForEach я хотел бы получить код xml в виде строковой переменной.

Я новичок в SSIS и довольно долго просматривал Интернет, но не мог понять это правильно.

Пример входного файла; input file ex. (Обратите внимание, что там есть некоторые символы кириллицы, которые могут вызвать проблемы. Однако, когда я убираю символы кириллицы, появляется то же сообщение об ошибке).

Я пытаюсь пройтись по узлам.

Это пакет, который я создал до сих пор;

введите описание изображения здесь

Ниже цикла ForEach; У меня есть переменная с именем «CurrencyRate», которая представляет собой строку, отображаемую там. Цикл ForEach

И задача XML внутри цикла. Это просто для целей тестирования, он должен записать последний элемент узла в этот выходной файл с тегами и значениями.

XML-задача

Однако, если я запускаю код как есть, я получаю приведенное ниже сообщение об ошибке, даже если я не вижу никаких значений NULL в своих данных. И я понятия не имею, откуда взялся японский (?) символ..; ошибка

Любая помощь будет принята с благодарностью! SSIS выглядит как мощный инструмент, и я хотел бы иметь возможность использовать его.


person Karel-Jan Misseghers    schedule 25.08.2015    source источник


Ответы (1)


Вместо перечислителя Foreach NodeList теперь я использую перечислитель Foreach From Variable.

Это весь пакет;

новый пакет

Использование следующих переменных;

переменные

С приведенным ниже сценарием в первой задаче сценария «CurrencyRates from XML to Array»; Этот код получит XML и поместит каждый узел как объект в массив. Затем этот массив передается в переменную объекта.

        public void Main()
    {
        // TODO: Add your code here

        System.Collections.ArrayList arr = new System.Collections.ArrayList();

        XmlDocument doc = new XmlDocument();
        doc.Load((String)Dts.Variables["User::file_path"].Value + Dts.Variables["User::file_name"].Value);
        XmlElement root = doc.DocumentElement;
        XmlNodeList nodes = root.SelectNodes("//CurrencyRate"); // You can also use XPath here
        foreach (XmlNode CurrencyRate in nodes)
        {
            arr.Add((String)CurrencyRate.InnerXml);
        }


        Dts.Variables["User::CurrencyRates"].Value = arr;

        Dts.TaskResult = (int)ScriptResults.Success;
    }

Затем эта объектная переменная зацикливается с помощью перечислителя Foreach From Variable, сопоставляя узлы с объектной переменной «CurrencyRate_Item». В цикле этот элемент перемещается в переменную String, которую мы затем можем использовать для наших нужд.

person Karel-Jan Misseghers    schedule 26.08.2015
comment
Спасибо, что нашли время опубликовать подробное решение. Сегодня вы сделали Интернет немного умнее. - person Nick.McDermaid; 26.08.2015