Toon posts:

[XML/SAX2] Parsen vanuit een IP socket?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ben vandaag aan 't stoeien geweest met de SAX2 implementatie in MSXML 3.0, en zie daar wel de voordelen van in bep. situaties. Bv. bij data replicatie: op 't moment dat je een EndElement event ontvangt kun je meteen de gegevens die je bij 't bijbehorende StartElement event hebt ontvangen direct in een database verwerken. Prachtig bij grote en nogal "platte" XML files.

Maar waar ik nu tegenaanloop: voor zover ik kan zien kan SAX alleen maar URL's parsen (of files, maar dat is in principe hetzelfde), en geen streams of data die via een IP socket binnenkomt.
Wat ik bedoel is, dat 'ie al begint met parsen voordat het hele XML document binnengehaald is.

Is zoiets met SAX ueberhaupt mogelijk?

Wat ik nu gebruik is een eigen clientje die de IP data opvangt en zelf de XML probeert te parsen (en direct posten in de database wanneer 'ie een volledig record heeft binnengekregen), maar dat parsertje is nogal beperkt, geen enkele validatie, van schema's of attributes heeft 'ie nog nooit gehoord, etc. Als ik die kan vervangen door een 'streaming' parser die dat allemaal wel kan, is 't mooi meegenomen.

Het ergste wat dat parsertje ooit voor z'n kiezen heeft gehad was een XML-stream van 109Mb (een volledig klantenbestand van een nieuw aangesloten vestiging). Wanneer je met ISDN routers werkt, is 't dan wel erg prettig dat je de data alvast kunt verwerken voor het hele bestand binnen is...

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Afterlife: voor zover ik kan zien kan SAX alleen maar URL's parsen (of files, maar dat is in principe hetzelfde), en geen streams of data die via een IP socket binnenkomt.
Das mooi knudde.
Is zoiets met SAX ueberhaupt mogelijk?
Normaal gesproken zijn SAX XMLReaders hier juist uitermate geschikt voor. In de SAX standaard is er een InputSource (org.xml.sax.InputSource) die je kan aanmaken met alle mogelijke bronnen zoals een InputStream of een Reader. Maar kennelijk is de MSXML implementatie niet echt SAX compatible.

Je zou ook kunnen kiezen voor de uistekende stuff van Apache. Xerces (beschikbaar voor C++ en Java) doet het in ieder geval uitstekend ( http://xml.apache.org ).

Overigens zie je de voordelen van parsen met SAX inderdaad uitstekend :) . Je krijgt de content al aangeleverd tijdens het parsen en bovendien wordt er geen object-structuur opgebouwd, wat uiteraard een stuk sneller is. Nu moet je dat natuurlijk wel zelf doen en dat gaat inderdaad vooral makkelijk bij platte XML. Bij niet platte XML kan je vaak met een Stack nog hele leuke dingen doen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hier kan je trouwens de officiele SAX website vinden:
http://sax.sourceforge.net/

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
mbravenboer:
Je zou ook kunnen kiezen voor de uistekende stuff van Apache. Xerces (beschikbaar voor C++ en Java) doet het in ieder geval uitstekend ( http://xml.apache.org ).
API ziet er erg goed uit, en kan precies wat ik zoek: een eigen inputstream definieren zonder beperkingen.
Maar om e.e.a. onder Delphi aan de praat te krijgen (zonder VC6 of BC5 bij de hand) wordt nog wel een uitdaging...
In de C++ Win32 binaries file zit alleen de standaard DLL, en niet de COM wrapper. Die zit wel in de source distributie, maar zonder C++ compiler die de source begrijpt heb je er niet zoveel aan (onder VC++ .NET kreeg ik 'm niet gecompileerd).

Dat wordt dus C++ headers overzetten naar Delphi, of iemand met een VC6 compiler eens lief aankijken... *D

  • bloody
  • Registratie: Juni 1999
  • Laatst online: 18:56

bloody

0.000 KB!!

niet precies volgens de sax regels (maar toch wel aardig ;)): de expat parser: expat.sourceforge.net

it rocks: http://www.xml.com/pub/a/Benchmark/article.html

nope


Verwijderd

Topicstarter
Die link is ruim 2 jaar oud, sinds die tijd is er wel heel wat gebeurd op XML-gebied, hoor. :)
Maar idd. ziet expat er erg netjes uit. Gelijksoortige benadering als SAX, en vergeleken met Xerces en MSXML erg compact. Ik ga er 's mee testen, al weet ik van tevoren al dat 'ie 2 belangrijke nadelen heeft:

- Niet helemaal SAX-conform, en
- er is geen COM-versie van. Dat maakt 't lastiger om 'm bv vanuit ASP te gebruiken, en voor Delphi betekent 't dat ik alweer C-headers moet gaan omzetten... Op zich geen ramp, maar ik kan me een leuker tijdverdrijf bedenken. :)
Pagina: 1