2016-04-21 43 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>