在SSIS中,如何使用Foreach NodeList枚举器中的XPATH在特定元素内循环XML

时间:2015-08-25 15:34:12

标签: xml xpath foreach ssis ssis-2012

我试图在SSIS中遍历XML输入文件的XML元素。 为此,我试图使用带有Foreach循环容器的'Foreach循环容器'。在ForEach循环容器中,我想将xml代码作为字符串变量。

我是SSIS的新手,并且已经浏览网页很长一段时间了,但却无法正确使用..

输入文件示例; input file ex. (请注意,那里有一些西里尔符号,这可能会导致问题。但是,当我拿出西里尔符号时,会显示相同的错误信息。)

我试图遍历节点。

这是我到目前为止创建的软件包;

enter image description here

在ForEach循环下面; 我有一个名为'CurrencyRate'的变量,它是一个映射在那里的String。 ForEach loop

循环中的XML Task。这仅用于测试目的,它应该使用标记和值将最后一个节点元素写入该输出文件。

XML Task

但是,如果我按原样运行代码,即使我在数据中没有看到任何NULL值,也会收到以下错误消息。我不知道日本(?)符号来自哪里......; error

任何帮助将不胜感激! SSIS看起来像一个强大的工具,我希望能够使用它。

1 个答案:

答案 0 :(得分:3)

我现在使用Foreach From Variable Enumerator而不是Foreach NodeList枚举器。

这是整个包裹;

new package

使用以下变量;

variables

在第一个脚本任务'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 Enumerator将该对象变量循环,将节点映射到对象变量“CurrencyRate_Item”。 在循环中,此项目在String变量中移动,然后我们可以根据需要使用它。