ciao a tutti,
ho un problema con la realizzazione di un parsing piuttosto particolare (Almeno per me che sono alle prime armi) di un file XML. ecco un esempio del mio file:

<?xml version="1.0" encoding="utf-8"?>
<env:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2001/12/soap-encoding" xmlns:ci="urn:cribisnet-cribisit-a2a:2004-09-13" xmlns:env="http://www.w3.org/2001/12/soap-envelope">
<env:Header/>
<env:Body>
<ci:CompanyCardXMLResponseBody ci:Culture="ITA">
<ci:VIPERS>
<ci:V303-GruppoCar>
<ci:V303-PROLOC>0</ci:V303-PROLOC>
<ci:V303-PROPER>1</ci:V303-PROPER>
<ci:V303-PROGRP>1</ci:V303-PROGRP>
</ci:V303-GruppoCar>
<ci:V303-GruppoCar>
<ci:V303-PROLOC>0</ci:V303-PROLOC>
<ci:V303-PROPER>1</ci:V303-PROPER>
<ci:V303-PROGRP>2</ci:V303-PROGRP>
</ci:V303-GruppoCar>
<ci:V303-GruppoCar>
<ci:V303-PROLOC>0</ci:V303-PROLOC>
<ci:V303-PROPER>1</ci:V303-PROPER>
<ci:V303-PROGRP>3</ci:V303-PROGRP>
</ci:V303-GruppoCar>
<ci:V303-GruppoCar>
<ci:V303-PROLOC>0</ci:V303-PROLOC>
<ci:V303-PROPER>3</ci:V303-PROPER>
<ci:V303-PROGRP>1</ci:V303-PROGRP>
</ci:V303-GruppoCar>
</ci:VIPERS>
</ci:CompanyCardXMLResponseBody>
</env:Body>
</env:Envelope>

Il mio XSL dovra' selezionare una sola occorrenza dei blocchi CI:V303-GRUPPOCAR per valore del campo CI:V303-PROPER.

In sintesi dovra' tirare fuori un solo blocco CI:V303-GRUPPOCAR con CI:V303-PROPER = 1 ed un solo blocco CI:V303-GRUPPOCAR con valore CI:V303-PROPER = 3 (in realta' ce n'e' uno solo).

In un linguaggio di programmazione tipo Java agirei come segue:
- Inizializzerei una variabile ad un valore dummy (tipo 99999)
- Fare un ciclo con condizione variabile != CI:V303-PROPER
o Se la condizione e' verificata entra nel ciclo, estrae il blocco e riassegna variabile al valore corrente di CI:V303-PROPER
o Se la condizione non e' verificata si skippa il blocco e si passa all'analisi del successivo

Cosi facendo otterrei il seguente flow:
1- Variabile = 99999
2- (blocco 1, CI:V303-PROPER = 1) -> 9999 != 1 -> entra nel ciclo, estrapola il blocco e pone variabile = 1;
3- (blocco 2, CI:V303-PROPER = 1) -> 1 != 1 -> condizione non verificata, skippa il blocco;
4- (blocco 3, CI:V303-PROPER = 1) -> 1 != 1 -> condizione non verificata, skippa il blocco;
5- (blocco 4, CI:V303-PROPER = 3) -> 1 != 3 -> entra nel ciclo, estrapola il blocco e pone variabile = 3;
6- Fine dei blokki -> programma termina

Come fare lo stesso, o cmq ottenere lo stesso risultato in XSL?

Ho pensato ad un template ricorsivo con la variabile sostituita da un param ma nn so tecnicamente come realizzarlo

grazie mille
L.