Use o método Where para fornecer uma iteração sequencial nos elementos na árvore de mensagens.
<MessageEnvelope>
<Element>1</Element>
<Element>2</Element>
<Element>3</Element>
</MessageEnvelope>
public override void Evaluate(NBMessageAssembly inputAssembly)
{
NBOutputTerminal outTerminal = OutputTerminal("out");
NBMessage inputMessage = inputAssembly.Message;
// Crie uma nova mensagem vazia, assegurando-se de que seja descartada após o uso
using (NBMessage outputMessage = new NBMessage())
{
NBMessageAssembly outAssembly = new NBMessageAssembly(inputAssembly, outputMessage);
NBElement inputRoot = inputMessage.RootElement;
NBElement outputRoot = outputMessage.RootElement;
// Copie, opcionalmente, os cabeçalhos das mensagens; remova-os se não forem necessários
CopyMessageHeaders(inputRoot, outputRoot);
#region UserCode
// Inclua o código do usuário nessa região para criar uma nova mensagem de saída
outputRoot.CreateLastChildUsingNewParser("XMLNSC");
outputRoot["XMLNSC"].CreateLastChild("OutputMessageEnvelope");
string notargetnamespace = "";
NBElement env = inputRoot["XMLNSC"]["MessageEnvelope"];
var elementlist = env.Where(t => t.Name == "Element");
foreach (NBElement element in elementlist)
{
int currentvalue = (Int32)element;
NBElement outelement = outputRoot["XMLNSC"]["OutputMessageEnvelope"].CreateLastChild(notargetnamespace, "OutElement");
outelement.SetValue("After adding 1 to input value we get " + (currentvalue + 1).ToString());
}
#endregion UserCode
// Altere o seguinte se não for propagar a mensagem para o terminal de 'Saída'
outTerminal.Propagate(outAssembly);
}
}
<OutputMessageEnvelope>
<OutElement>After adding 1 to input value we get value 2</OutElement>
<OutElement>After adding 1 to input value we get value 3</OutElement>
<OutElement>After adding 1 to input value we get value 4</OutElement>
</OutputMessageEnvelope>