Перечислитель Foreach NodeList в biml
У меня есть цикл foreach, который проходит через XML. я знаю, как добавить этот вид foreach в SSIS. но не смог найти фрагмент кода BIML для того же.
как упомянуть ниже свойства в foreachloopcontainer в biml
Enumerator = Foreach NodeList Enumerator
DocumentSourceType = Variable
DocumentSource
EnumerationType = NodeText
OuterXPathStringSourceType = DirectInput
OuterXPathString = / ROOT / *
любая помощь в получении примера кода для написания foreachloopcontainer с перечислителем nodelist будет большой помощью!!!
1 ответ
Если вы хотите использовать переменную в качестве источника ввода, то вы ищете VariableInput
EnumerationType
выставлен в ForEachNodeListLoop
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>