ich nutze folgende Funktionen, um eine XML Datei einzulesen und ihren Inhalt spezifischen Variablen zuzuordnen
Code: Alles auswählen
read_dom () {
local IFS=\>
read -d \< ENTITY CONTENT
local ret=$?
TAG_NAME=${ENTITY%% *}
ATTRIBUTES=${ENTITY#* }
return $ret
}
Code: Alles auswählen
while read_dom; do
if [[ $ENTITY = "Distributor" ]] ; then
echo "Distributor:" $CONTENT
elif [[ $ENTITY = "Konditionen" ]] ; then
echo "Konditionen starten hier"
fi
if [[ $TAG_NAME = "Auszahlung" ]] ; then
eval $ATTRIBUTES
echo "Auszahlung Quote name is: $quote"
elif [[ $TAG_NAME = "bar" ]] ; then
eval local $ATTRIBUTES
echo "bar type is: $type"
fi
if [[ $ENTITY = "Produktname" ]] ; then
echo $CONTENT
fi
echo "zeilenweise?"
done < ./xml-datei
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<Daten>
<Distributor>Distributor</Distributor>
<Konditionen>
<Abschlussfrist>24</Abschlussfrist>
<Abruffrist>26</Abruffrist>
<Uebertritt>1</Uebertritt>
<Staffelung>
<Auszahlung quote="0.80"></Auszahlung>
<Auszahlung quote="0.20">0628</Auszahlung>
</Staffelung>
<Zielvereinbarung>
<Provision abziel="005" abdatum="180101" wdhab="25" wdbis="24">000415.00</Provision>
</Zielvereinbarung>
</Konditionen>
<Portfolio>
<Produktgruppe>
</Produktgruppe>
</Portfolio>
</Daten>
Es ist ja so dass auch hier die Datei Zeile für Zeile eingelesen wird und dann die Verarbeitung stattfindet.
In meinem derzeitig angewandtem Modell gehe ich da so vor:
Code: Alles auswählen
Konditionenposition=`awk -v a="$distributor_zeile" -v b="<Konditionen>" 'BEGIN{print index(a,b)}'`
if [ 0 -lt "$Konditionenposition" ]; then
Konditionenpositionende=0
echo "KONDITIONENSCHLEIFE START" $distributor_zeile
while [ $Konditionenpositionende == 0 ]
do
read distributor_zeile
Konditionenpositionende=`awk -v a="$distributor_zeile" -v b="/Konditionen>" 'BEGIN{print index(a,b)}'`
if [ 0 != "$Konditionenpositionende" ]; then
if [ ${abschlussdatum:4} -le $Abschlussfrist ] && [ ${abrufdatum:4} -le $Abruffrist ] ; then
echo "in der frist"
aufschub=0
else
echo "ein monat später"
aufschub=1
fi
echo "KONDITIONENSCHLEIFE END" ${abschlussdatum:4} $Abschlussfrist ${abrufdatum:4} $Abruffrist
break
fi
Distributorposition=`awk -v a="$distributor_zeile" -v b="<Distributor>" 'BEGIN{print index(a,b)}'`
if [ 0 -lt "$Distributorposition" ]; then
insg=${#distributor_zeile}
Distributor=${distributor_zeile:13:$insg-27}
echo ":" $Distributor
continue
fi
Abschlussfristposition=`awk -v a="$distributor_zeile" -v b="<Abschlussfrist>" 'BEGIN{print index(a,b)}'`
if [ 0 -lt "$Abschlussfristposition" ]; then
insg=${#distributor_zeile}
Abschlussfrist=${distributor_zeile:16:$insg-33}
echo ":" $Abschlussfrist
continue
fi
Abruffristposition=`awk -v a="$distributor_zeile" -v b="<Abruffrist>" 'BEGIN{print index(a,b)}'`
if [ 0 -lt "$Abruffristposition" ]; then
insg=${#distributor_zeile}
Abruffrist=${distributor_zeile:12:$insg-25}
echo ":" $Abruffrist
continue
fi
Uebertrittposition=`awk -v a="$distributor_zeile" -v b="<Uebertritt>" 'BEGIN{print index(a,b)}'`
if [ 0 -lt "$Uebertrittposition" ]; then
insg=${#distributor_zeile}
Uebertritt=${distributor_zeile:12:$insg-25}
echo ":" $Uebertritt
continue
fi
Wie bekomme ich das hin?
Danke schonmal...