webForumDet fria alternativet

Hantera lite XML-data i taget

4 svar · 454 visningar · startad av intesa

intesaMedlem sedan apr. 2006190 inlägg
#1

Har ett program som tar emot data i xml-format enligt:

<message>
 <text>Text</text>
 <img>Base64 kodad data</img>
</message>

Använder mig av Jakarta Commons Digester för att parsa genom filen, men eftersom "img"-datan kan vara rätt stor skulle jag vilja göra om den till binär-data och spara ner den till en fil allt eftersom datan kommer in, istället för som nu när all data tagits emot.

Det pinsamma i situationen är att jag gjort detta i ett projekt för ett par år sen. Men nu har jag sumpat koden och kan inte komma på hur jag gjorde :r

Några ideér? :i

spangoMedlem sedan juni 20006 147 inlägg
#2

Du kanske vill läsa direkt från SAX-parsern istället för att bygga ett DOM-träd?
http://java.sun.com/webservices/jaxp/dist/1.1/docs/tutorial/sax/2a_echo.html

intesaMedlem sedan apr. 2006190 inlägg
#3

Jaha, så lätt var det, tack spango!

LimeMedlem sedan sep. 2001837 inlägg
#4

Mmm... SÅ lätt är det. I det projektet jag sitter i nu har en av gubbarna skrivit en EGEN SAX-parser istället för att använda någon befintlig "för jag vet ju inte om den du sagt att vi ska använda fungerar". *suck*

intesaMedlem sedan apr. 2006190 inlägg
#5

Äta kakan och ha den kvar

Drar upp den här tråden igen för nu har jag lite mer problem.
Det är nämligen så att XML-protokollet har utökats och blivit mycket mer avancerat, vilket gör att man i princip måste modda SAX-parsern för att kunna bygga upp ett DOM-träd för att få lite struktur på det hela och för att kunna behandla datan på ett bra sätt senare. Fast nu vill jag ju inte göra som gubben i Limes projekt och uppfinna hjulet på nytt ;)

Hade en liten fundering på om det skulle kunna gå att lägga in ett filter på inputstreamen som kör datan genom en SAX-parser och spar ner den base64 kodade datan och ersätter den med sökvägen dit datan sparades innan en DOM-parser läser in datan som såhär:

Före filtrering:

<message>
 <image>
  <text>Text 1</text>
  <data>Base64 data</data>
 </image>
 <image>
  <text>Text 2</text>
  <data>Base64 data</data>
 </image>
</message>

Efter filtrering:

<message>
 <image>
  <text>Text 1</text>
  <data>/tmp/fil1.png</data>
 </image>
 <image>
  <text>Text 2</text>
  <data>/tmp/fil2.png</data>
 </image>
</message>

Hur gör jag detta på bästa sätt tro?

Genererad på 370 ms · cache AV · v20260730165559-full.f96bc7eb