Ik be op dit moment bezig met het maken van een applicatie die over sockets via XML communiceert. XML komt dus via een socket binnen.
Daarbij gebeurt het volgende:
De parser krijgt preparser mee als handler. Nu doet de preparser niks anders dan bepalen wat voor soort XML-bericht het is aan de hand van de eerste start-tag die hij tegenkomt, die info stuurt hij naar de hoofdprogramma op die zo bepaalt welke klasse hij zal aanmaken.
Aangezien de preparser niet nodig is na de eerste tag(identificatie) moet de parser alle volgende tags bij de nieuw aangemaakte handler melden, dat betekent dus dat er IN de parser de handler wordt veranderd. Er is echter geen methode hiervoor, ik kan de handler niet veranderen(met bijvoorbeeld saxParser.setcontenthandler(handler)). Met zo'n methode kan de parser rustig doorgaan met het rapporteren van tags en data maar nu aan een andere handler.
En als ik "saxParser.parse(insource,nieuwehandler)" na de preparse aanroep om de handler te veranderen ben ik bang dat de parser dus zo de start-document en de start-tag gemist heeft(die waren aan de preparser gemeld) en die xml-file dus niet meer kloppend is.
Heeft iemand een oplossing voor dit probleem?
Alvast bedankt.
Daarbij gebeurt het volgende:
code:
1
2
3
4
5
| SAXParserFactory factory = SAXParserFactory.newInstance();
saxParser = factory.newSAXParser();
PreParser p= new PreParser(this);
inSource= new InputSource(new BufferedReader(new InputStreamReader(socket.getInputStream())));
saxParser.parse(inSource, p); |
De parser krijgt preparser mee als handler. Nu doet de preparser niks anders dan bepalen wat voor soort XML-bericht het is aan de hand van de eerste start-tag die hij tegenkomt, die info stuurt hij naar de hoofdprogramma op die zo bepaalt welke klasse hij zal aanmaken.
Aangezien de preparser niet nodig is na de eerste tag(identificatie) moet de parser alle volgende tags bij de nieuw aangemaakte handler melden, dat betekent dus dat er IN de parser de handler wordt veranderd. Er is echter geen methode hiervoor, ik kan de handler niet veranderen(met bijvoorbeeld saxParser.setcontenthandler(handler)). Met zo'n methode kan de parser rustig doorgaan met het rapporteren van tags en data maar nu aan een andere handler.
En als ik "saxParser.parse(insource,nieuwehandler)" na de preparse aanroep om de handler te veranderen ben ik bang dat de parser dus zo de start-document en de start-tag gemist heeft(die waren aan de preparser gemeld) en die xml-file dus niet meer kloppend is.
Heeft iemand een oplossing voor dit probleem?
Alvast bedankt.