18. juni 2003 - 17:06Der er
19 kommentarer og 1 løsning
xml parsing og reference til variable
Jeg har midlertidigt glemt hvordan man programmere i Java :-)
Hvis jeg har lavet en extension af DefaultHandler til at (SAX) parse en xml fil, og i løbet af parsningen gerne vil have opdateret et object fra den klasse der har kaldt parseren - hvordan er det så man gør?
Altså, hvis jeg vil lave noget ala:
String toupdate = ""; handler = new MyHandler(toupdate); xmlreader.setContentHandler(handler); xmlreader.parse(xmlfile); // toupdate er nu blevet ændret...
public class MyHandler extends ContentHandler{ private Object toUpdate; MyHandler(Object toUpdate){ this.toUpdate = toUpdate; } // her er der mange mulighder. Fx: public void startDocument(){ toUpdate = "updated"; } }
// Kør så din kode: ... ContentHandler handler = new MyHandler(toUpdate); ...
// Lige et par rettelser. En klasse kan naturligvis ikke extende et interface.
public class MyHandler extends DefaultHandler{ private Object toUpdate; MyHandler(Object toUpdate){ this.toUpdate = toUpdate; } // her er der mange mulighder. Fx: public void startDocument(){ toUpdate = "updated"; // et kald til super er nok på sin plads her. super.startDocument(); } }
// Kør så din kode: ... ContentHandler handler = new MyHandler(toUpdate); ...
Der bliver sendt en ArrayList over som argument, men den bliver ikke forsøgt erstattet med en anden med: result= men der bliver tilføjet data til den med: result.add
arne_v> Er dit eksempel noget nu har kørt? Jeg har allerede en hashtabel som bliver sendt over, og som heller ikke bliver opdateret. Og den bliver jo også kun modificeret med .put()
Det sku da mystisk - også fordi hashtabellen indeholder en node i et JTree, som bliver hentet ud under parsningen og får tilføjet childnodes - og det går fint. Men når de samme nye nodes tilføjes til hashtabellen, går det ikke.
Ellers er den største forskel mellem dit og mit program, at mit er en applet - men det burde ikke betyde så meget...?
Og den ændre faktisk også noget (navnet ved .toString()) på root noden. Så referencen til det objekt som er i hashtabelen kommer med, men men ikke referencen til selve tabelen.
damn damn damn! Det er bare en lille f*#¤$@% fejl fra min side - et stykke af koden som var skrevet forkert! :-( Men nu virker det! Sådan er det nogen gange - så kan man ikke se skoven :-/
(Lavede en simpel handler klasse, som kun tilføjede et ellement til hashtabellen, og da det virkede, måtte jeg kigge den anden igennem endnu en gang - og så pludselig var den der.)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.