Utilice el método Where para proporcionar una iteración secuencial sobre elementos en el árbol de mensajes.
<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;
// Crear un nuevo mensaje vacío, asegurándose de eliminarlo después de su uso
using (NBMessage outputMessage = new NBMessage())
{
NBMessageAssembly outAssembly = new NBMessageAssembly(inputAssembly, outputMessage);
NBElement inputRoot = inputMessage.RootElement;
NBElement outputRoot = outputMessage.RootElement;
// Opcionalmente copiar cabeceras de mensajes, eliminar si no se necesita
CopyMessageHeaders(inputRoot, outputRoot);
#region UserCode
// Añadir código de usuario en esta región para filtrar el mensaje
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("Después de añadir 1 al valor de entrada se obtiene " + (currentvalue + 1).ToString());
}
#endregion UserCode
// Cambiar lo siguiente si no se va a propagar el mensaje al terminal 'Out'
outTerminal.Propagate(outAssembly);
}
}
<OutputMessageEnvelope>
<OutElement>Después de añadir 1 al valor de entrada se obtiene el valor 2</OutElement>
<OutElement>Después de añadir 1 al valor de entrada se obtiene el valor 3</OutElement>
<OutElement>Después de añadir 1 al valor de entrada se obtiene el valor 4</OutElement>
</OutputMessageEnvelope>