Voor een monitoring applicatie krijg ik een stroom xml entries binnen die ik moet verwerken. Omdat de datastroom oneindig is moet ik elke keer na een bepaalde hoeveelheid data (chunk) de entries verwerken. De tcp sessie eindigt dus ook nooit. Ik zit er nu mee hoe ik dit efficient kan doen.
de data heeft het volgende format
het gaat me dan om de tekst binnen de <c></c> tags inclusief deze tags. Het aantal c tags binnen de <b> tags kan verschillen. Het kan ook voorkomen dat de string niet volledig is met een sluittag omdat deze in de volgende chunk pas komt bijvoorbeeld
de volgende chunk is dan bijvoorbeeld
Mijn idee is om eerst de <a><b></b></a> weg te gooien.
Vervolgens met de volgende code de alarmen stuk voor stuk te parsen
in $alarms plaats ik de info met nieuwe alarmen uit de nieuwe chunk ($chunkdata). Hier plaats ik het restje van de vorige alarmen voor indien dat over is
Iemand een ander idee om dit aan te pakken of is dit wel een efficiënte manier om zoiets aan te pakken?
de data heeft het volgende format
<a><b><c id="123">alarm1</c><c id="124">alarm2</c></b></a>
het gaat me dan om de tekst binnen de <c></c> tags inclusief deze tags. Het aantal c tags binnen de <b> tags kan verschillen. Het kan ook voorkomen dat de string niet volledig is met een sluittag omdat deze in de volgende chunk pas komt bijvoorbeeld
<a><b><c id="123">alarm1</c><c id="124">ala
de volgende chunk is dan bijvoorbeeld
rm2</c></b></a><a><b><c id="124">alarm3</c></b></a>
Mijn idee is om eerst de <a><b></b></a> weg te gooien.
Vervolgens met de volgende code de alarmen stuk voor stuk te parsen
Perl:
1
2
3
4
5
| $alarms=$alarms . $chunkdata while ($alarms=~s/(<c id="\d+">.+?<\/c>)(.*)/$2/) { #$1 bevat het eerste alarm en kan ik gaan verwerken. #$alarms bevat dan het restje wat geen volledig alarm is. } |
in $alarms plaats ik de info met nieuwe alarmen uit de nieuwe chunk ($chunkdata). Hier plaats ik het restje van de vorige alarmen voor indien dat over is
Iemand een ander idee om dit aan te pakken of is dit wel een efficiënte manier om zoiets aan te pakken?