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.

Rispondi quotando