2016-04-21 49 views
0

我有一个遍历xml的foreach循环。 我知道如何在SSIS中添加这种foreach。但无法找到相同的代码片段bimlbiml Foreach NodeList枚举器

如何在foreachloopcontainer在BIML下面提到性质

枚举= FOREACH节点列表枚举

DocumentSourceType =变量

DocumentSource

EnumerationType = NodeText

OuterXPathStringSourceType = DIRECTI NPUT

OuterXPathString =/ROOT/*

在具有用于写入与foreachloopcontainer枚举节点列表将是一个马丽娟帮助样本代码的任何帮助!

回答

0

如果你想使用一个变量作为输入源,那么你正在寻找VariableInput

EnumerationTypeForEachNodeListLoop

DirectOuterXPath暴露是您指定OuterXPathStringSource,如<DirectOuterXPath>/ROOT/*</DirectOuterXPath>

虽然不是您的请求的确切表示(我全部使用变量),但将<Files><File>Foo.txt</File><File>Bar.txt</File><File>Blee.txt</File></Files>分解为Foo.txt,Bar.txt和Blee.txt

<Biml xmlns="http://schemas.varigence.com/biml.xsd"> 
    <Packages> 
     <Package Name="so_36759813"> 
      <Variables> 
       <Variable DataType="String" Name="CurrentNode"></Variable> 
       <Variable DataType="String" Name="SourceXML"><![CDATA[<Files><File>Foo.txt</File><File>Bar.txt</File><File>Blee.txt</File></Files>]]></Variable> 
       <Variable DataType="String" Name="OuterXPath"><![CDATA[/Files/File]]></Variable> 
       <Variable DataType="String" Name="InnerXPath"><![CDATA[.]]></Variable> 
      </Variables> 
      <Tasks> 
       <ForEachNodeListLoop 
        Name="FENLL Shred XML" 
        EnumerationType="ElementCollection" 
        InnerElementType="NodeText" 
        > 
        <VariableInput VariableName="User.SourceXML" /> 
        <VariableOuterXPath VariableName="User.OuterXPath" /> 
        <VariableInnerXPath VariableName="User.InnerXPath" /> 
        <VariableMappings> 
         <VariableMapping VariableName="User.CurrentNode" Name="0" /> 
        </VariableMappings> 
        <Tasks> 
         <Script ProjectCoreName="ST_EchoBack" Name="SCR Echo Back"> 
          <ScriptTaskProjectReference ScriptTaskProjectName="ST_EchoBack" /> 
         </Script>    
        </Tasks> 
       </ForEachNodeListLoop> 
      </Tasks> 
     </Package> 
    </Packages> 
    <ScriptProjects> 
     <ScriptTaskProject ProjectCoreName="ST_EchoBack" Name="ST_EchoBack" VstaMajorVersion="0"> 
      <ReadOnlyVariables> 
       <Variable Namespace="User" VariableName="CurrentNode" DataType="String" /> 
      </ReadOnlyVariables> 
      <Files> 
       <File Path="ScriptMain.cs" BuildAction="Compile">using System; 
using System.Data; 
using Microsoft.SqlServer.Dts.Runtime; 
using System.Windows.Forms; 

namespace ST_EchoBack 
{ 
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] 
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
    { 
     public void Main() 
     { 
      bool fireAgain = false; 
      string message = "{0}::{1} : {2}"; 
      foreach (var item in Dts.Variables) 
      { 
       Dts.Events.FireInformation(0, "SCR Echo Back", string.Format(message, item.Namespace, item.Name, item.Value), string.Empty, 0, ref fireAgain); 
      } 

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

     enum ScriptResults 
     { 
      Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, 
      Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure 
     }; 
    } 
}    </File> 
       <File Path="Properties\AssemblyInfo.cs" BuildAction="Compile"> 
using System.Reflection; 
using System.Runtime.CompilerServices; 

[assembly: AssemblyVersion("1.0.*")] 
       </File> 
      </Files> 
      <AssemblyReferences> 
       <AssemblyReference AssemblyPath="System" /> 
       <AssemblyReference AssemblyPath="System.Data" /> 
       <AssemblyReference AssemblyPath="System.Windows.Forms" /> 
       <AssemblyReference AssemblyPath="System.Xml" /> 
       <AssemblyReference AssemblyPath="Microsoft.SqlServer.ManagedDTS.dll" /> 
       <AssemblyReference AssemblyPath="Microsoft.SqlServer.ScriptTask.dll" /> 
      </AssemblyReferences> 
     </ScriptTaskProject> 
    </ScriptProjects> 
</Biml>