Copia di campi che si ripetono

E' possibile configurare un nodo con ESQL per copiare i campi che si ripetono in diversi modi.

Prendere in considerazione un messaggio XML di input che contenga una struttura che si ripete:

...
	<Field_top>
			<field1></field1>
			<field1></field1>
			<field1></field1>
			<field1></field1>
			<field1></field1>
	</Field_top>
.....

Non è possibile copiare l'intero campo della struttura con la seguente istruzione:

SET OutputRoot.XML.Output_top.Outfield1 = InputRoot.XML.Field_top.field1;

Tale istruzione copia solo la prima ripetizione e quindi produce lo stesso risultato di questa istruzione:

SET OutputRoot.XML.Output_top.Outfield1[1] = InputRoot.XML.Field_top.field1[1];

E' possibile copiare i campi in un loop, controllando le iterazioni con la funzione CARDINALITY del campo di input:

SET I = 1;
SET J = CARDINALITY(InputRoot.XML.Field_top.field1[]);
WHILE I <= J DO
	SET OutputRoot.XML.Output_top.Outfield1[I] = InputRoot.XML.Field_top.field1[I];
SET I = I + 1;
END WHILE;

Questa potrebbe essere una soluzione appropriata se si desidera modificare ogni campo nel messaggio di output mentre viene copiato dal campo di input (ad esempio, aggiungervi un numero o convertire il contenuto in maiuscolo) o dopo che è stato copiato. Se il messaggio di output contenesse già più campi Field1 di quanti ne esistano nel messaggio di input, i campi in eccedenza non verrebbero modificati dal loop e resterebbero nel messaggio di output.

La seguente singola istruzione copia le iterazioni dei campi di input nei campi di output ed elimina tutti i campi in eccedenza nel messaggio di output.

SET OutputRoot.XML.Output_top.Outfield1.[] = InputRoot.XML.Field_top.field1[];

Il seguente esempio mostra come ridenominare gli elementi quando si copiano nella struttura ad albero di output. Questa istruzione va oltre la copia del nome dell'elemento di origine, quindi ogni elemento field1 diventa un elemento Target.

SET OutputRoot.XML.Output_top.Outfield1.Target[] = 
    (SELECT I FROM InputRoot.XML.Field_top.field1[] AS I );

L'esempio successivo mostra un modo diverso di eseguire la stessa operazione; produce lo stesso risultato finale.

SET OutputRoot.XML.Output_top.Outfield2.Target[] 
              = InputRoot.XML.Field_top.field1[];  

Il seguente esempio va oltre la copia del nome dell'elemento di origine. Ogni elemento field1 è mantenuto come elemento field1 sotto l'elemento Target.

SET OutputRoot.XML.Output_top.Outfield3.Target.[] 
              = InputRoot.XML.Field_top.field1[];  

Questo esempio rappresenta un modo alternativo di ottenere lo stesso risultato, con gli elementi field1 creati sotto l'elemento Target.

SET OutputRoot.XML.Output_top.Outfield4.Target.*[] 
              = InputRoot.XML.Field_top.field1[];

Questi esempi mostrano che esistono diverse modalità di codificare ESQL per copiare i campi che si ripetono dall'origine alla destinazione. Selezionare il metodo più appropriato per ottenere i risultati richiesti.

I principal qui indicati si applicano ugualmente a tutte le aree della struttura ad albero del messaggio in cui è possibile scrivere dati, non solo alla struttura ad albero del messaggio di output.

Concetti correlati
Panoramica dei flussi di messaggi
Panoramica di ESQL
Attività correlate
Progettazione di un flusso di messaggi
Gestione dei file ESQL
Riferimenti correlati
Nodo Compute
Nodo Database
Nodo Filter
Riferimento ESQL
Istruzione SET
Istruzione WHILE
Funzione CARDINALITY
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac20420_